diff options
| author | Daniil Baturin <daniil@baturin.org> | 2017-01-05 00:55:22 +0700 |
|---|---|---|
| committer | Daniil Baturin <daniil@baturin.org> | 2017-01-05 00:55:22 +0700 |
| commit | 321d1548d46138afdb458c4646eb32ef8683d05b (patch) | |
| tree | 85baed4c181e1424a2606e6ce8d4d6524d3350e8 /src/curly_parser.mly | |
| parent | 1710c38d8a174698e5c68d876c8afb8dd91c2d4f (diff) | |
| download | vyconf-321d1548d46138afdb458c4646eb32ef8683d05b.tar.gz vyconf-321d1548d46138afdb458c4646eb32ef8683d05b.zip | |
Initial implementation of the curly config parser.
Diffstat (limited to 'src/curly_parser.mly')
| -rw-r--r-- | src/curly_parser.mly | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/curly_parser.mly b/src/curly_parser.mly new file mode 100644 index 0000000..0053b56 --- /dev/null +++ b/src/curly_parser.mly @@ -0,0 +1,52 @@ +%{ + open Config_tree +%} + +%token <string> IDENTIFIER +%token <string> STRING +%token <string> COMMENT +%token LEFT_BRACE +%token RIGHT_BRACE +%token LEFT_BRACKET +%token RIGHT_BRACKET +%token SEMI +%token EOF + +%start <Config_tree.t> config +%% + +opt_comment: + | (* empty *) { None } + | c = COMMENT { Some c } + +value: + | v = STRING + { v } + | v = IDENTIFIER + { v } +; + +values: + | v = value { [v] } + | LEFT_BRACKET; vs = separated_nonempty_list(SEMI, value); RIGHT_BRACKET + { vs } +; + +leaf_node: + | comment = opt_comment; name = IDENTIFIER; values = values; SEMI + { Vytree.make_full {default_data with values=values; comment=comment} name []} +; + +node: + | comment = opt_comment; name = IDENTIFIER; LEFT_BRACE; children = list(node_content); RIGHT_BRACE + { let node = Vytree.make_full {default_data with comment=comment} name [] in List.fold_left Vytree.adopt node children } +; + +node_content: n = node { n } | n = leaf_node { n }; + +%public config: + ns = list(node); EOF + { + let root = make "root" in List.fold_left Vytree.adopt root ns + } +; |
