【问题标题】:ocaml parser and lexerocaml 解析器和词法分析器
【发布时间】:2013-01-31 00:44:20
【问题描述】:

您好,我有 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)

并且程序假设做这样的事情:

【问题讨论】:

    标签: parsing ocaml lexer parser-generator


    【解决方案1】:

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

    【讨论】:

    • 但它仍然说:错误:构造函数 LET 需要 1 个参数,但在这里应用于 0 个参数
    • 文件“nanoLex.mll”,第 10 行,字符 32-37:这是词法分析器,所以我必须改变什么才能让它接受参数?
    • 我确实将其更改为 ($2,$3,$5),但我现在在词法分析器中进行了更改?
    • 您应该以类似的方式更改所有其他解析器规则。还将In 更改为IN。当我这样做时,一切都会编译。我没有收到 ocamllex 的投诉。
    • 是的,我确实改变了这一点,但我收到了关于词法分析器的投诉
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 2011-04-07
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多