解析ocaml时用eol分隔列表

Separating a list by eol when parsing ocaml

我在我的编译器中定义了一些语句和表达式列表。我正在使用 Menhir 进行解析。通常在对 EOL 进行词法分析时,它会这样做: | eol { incr_linenum lexbuf; read lexbuf } 但是,我希望能够解析这个:

stmt;
stmt;
stmt;
expr
expr
expr

stmt定义如下:

stmt :
| ...
| stmt SEMICOLON

我的程序是这样的:

prog :
| stmt; expr list

我希望 expr 被解释为 expr 的列表。有没有办法做到这一点?还是我的列表必须用其他字符分隔?

manual(第 5.4 节)所述,您可以轻松指定一个没有任何分隔符的列表:

prog:
| stmt; list(expr)