/
yaml_parser.mly
42 lines (35 loc) · 1.15 KB
/
yaml_parser.mly
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
%token <string> STRING
%token COLON
%token HYPHEN
%token INDENT
%token DEDENT
%token <string> COMMENT
%token EMPTY_LINE
%token EOF
%start <Yaml.elem option> prog
%%
prog:
|EOF {None}
|seq = sequence prog {Some (`Sequence seq)}
|map = mapping prog {Some (`Mapping map)}
|c = COMMENT prog {Some (`Comment c)}
|EMPTY_LINE prog {print_endline "empty line recognized"; Some (`Comment "empty line")}
;
value:
|INDENT; seq = sequence; DEDENT {`Sequence seq}
|INDENT; map = mapping; DEDENT {`Mapping map}
|str = STRING {`Scalar str}
;
sequence:
obj = rev_sequence {print_endline "seq complete!!!"; List.rev obj};
rev_sequence:
|HYPHEN; v = value {print_endline "seq!!!"; [v]}
|seq = rev_sequence; HYPHEN; v = value {print_endline "seq!!!"; v::seq}
;
mapping:
obj = rev_mapping {print_endline "map complete!!!"; List.rev obj};
rev_mapping:
|{[]}
|map = rev_mapping; s = STRING; COLON; v = value {print_endline ("map!!!" ^ s); (`Scalar s,v)::map}
;
(*|s = STRING; COLON; v = value {print_endline ("map!!!" ^ s); [(`Scalar s,v)]}*)