Add one-line comment support and make some semi-column optional
Make possible the parsing of the counting example of *Clock-directed Modular Code Generation for Synchronous Data-flow Languages* (https://www.di.ens.fr/~pouzet/bib/lctes08a.pdf). ``` -- count the number of top between two tick node counting (tick:bool; top:bool) returns (o: int) var v: int; let o = if tick then v else 0 -> pre o + v; v = if top then 1 else 0; tel; ``` The one-line comment rule was inspired from https://mukulrathi.com/create-your-own-programming-language/parsing-ocamllex-menhir/. Note their typo using `single_line_comment` instead of `read_single_line_comment`.
This commit is contained in:
parent
97930ba85c
commit
dcf7320c0d
@ -62,6 +62,11 @@ rule token = parse
|
|||||||
| '/' { BO_div }
|
| '/' { BO_div }
|
||||||
| '%' { BO_mod }
|
| '%' { BO_mod }
|
||||||
| "->" { BO_arrow }
|
| "->" { BO_arrow }
|
||||||
|
| "--" { read_single_line_comment lexbuf }
|
||||||
| eof { EOF }
|
| eof { EOF }
|
||||||
| _ { raise (Lexing_error (Format.sprintf "Error when seeing %s" (lexeme lexbuf)))}
|
| _ { raise (Lexing_error (Format.sprintf "Error when seeing %s" (lexeme lexbuf)))}
|
||||||
|
|
||||||
|
and read_single_line_comment = parse
|
||||||
|
| '\n' { token lexbuf }
|
||||||
|
| eof { EOF }
|
||||||
|
| _ { read_single_line_comment lexbuf }
|
||||||
|
@ -187,9 +187,9 @@ node:
|
|||||||
|
|
||||||
node_content:
|
node_content:
|
||||||
IDENT LPAREN in_params RPAREN
|
IDENT LPAREN in_params RPAREN
|
||||||
RETURNS LPAREN out_params RPAREN SEMICOL
|
RETURNS LPAREN out_params RPAREN OPTIONAL_SEMICOL
|
||||||
local_params
|
local_params
|
||||||
LET equations TEL
|
LET equations TEL OPTIONAL_SEMICOL
|
||||||
{ let node_name = $1 in
|
{ let node_name = $1 in
|
||||||
let (t_in, e_in) = $3 in
|
let (t_in, e_in) = $3 in
|
||||||
let (t_out, e_out) = $7 in
|
let (t_out, e_out) = $7 in
|
||||||
@ -202,6 +202,11 @@ node_content:
|
|||||||
n_type = FTArr (t_in, t_out); } in
|
n_type = FTArr (t_in, t_out); } in
|
||||||
Hashtbl.add defined_nodes node_name n; n };
|
Hashtbl.add defined_nodes node_name n; n };
|
||||||
|
|
||||||
|
OPTIONAL_SEMICOL:
|
||||||
|
| /* empty */ {}
|
||||||
|
| SEMICOL {}
|
||||||
|
;
|
||||||
|
|
||||||
in_params:
|
in_params:
|
||||||
| /* empty */ { (FTList [], []) }
|
| /* empty */ { (FTList [], []) }
|
||||||
| param_list { $1 }
|
| param_list { $1 }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user