Parsing ocaml解析器和词法分析器

Parsing ocaml解析器和词法分析器,parsing,ocaml,lexer,parser-generator,Parsing,Ocaml,Lexer,Parser Generator,嗨,我有3个文件nano.ml,它是类型,还有一个paser和lexer文件。我不知道如何为解析器编写规则,我尝试编写规则,但它给我错误的说法,即不接受参数。 当我试着编译时,它给了我这个 :File "nanoParse.mly", line 31: $1 refers to terminal `LET', which has no argument Compiling (to byte code) OCAML module nanoLex.ml ocamlc -dtypes -c nanoL

嗨,我有3个文件nano.ml,它是类型,还有一个paser和lexer文件。我不知道如何为解析器编写规则,我尝试编写规则,但它给我错误的说法,即不接受参数。
当我试着编译时,它给了我这个

:File "nanoParse.mly", line 31: $1 refers to terminal `LET', which has no argument
Compiling (to byte code) OCAML module nanoLex.ml
ocamlc -dtypes -c nanoLex.ml -o nanoLex.cmo
File "nanoLex.mll", line 10, characters 32-37:
Error: The constructor LET expects 1 argument(s),
but is here applied to 0 argument(s)

这个程序假设这样做:

我想你想要的是
{Let($2,$3,$5)}
而不是
{Let($1,$2,$3)}
。然而,这有很多代码需要查看。你可能想从一个小例子开始,然后从那里开始。

我想你想要的是
{Let($2,$3,$5)}
而不是
{Let($1,$2,$3)}
。然而,这有很多代码需要查看。你可能想从一个小例子开始,然后从那里开始工作。

但它仍然在说:错误:构造函数期望1个参数,但在这里应用于0个参数文件“nanoLex.mll”,第10行,字符32-37:哪一个是lexer,所以我必须更改什么才能让它接受参数?我确实将其更改为($2,$3,$5),但是我现在在lexer中做了什么更改?您应该以类似的方式更改所有其他解析器规则。同时将中的
更改为
中的
。当我这样做的时候,一切都会被编译。我没有收到来自ocamlex的投诉。是的,我确实改变了这一点,但我收到了关于lexer的投诉,但它仍然说:错误:构造函数期望1个参数,但这里应用于0个参数文件“nanoLex.mll”,第10行,字符32-37:哪一个是lexer,所以我必须改变什么才能让它接受参数?我确实改变了它($2,$3,$5),但我现在在lexer中做了更改?你应该以类似的方式更改所有其他解析器规则。同时将
中的
更改为
中的
。当我这样做时,一切都会编译。我没有收到Ocamlex的投诉。是的,我确实更改了,但我收到了关于lexer的投诉