Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问匹配字符串ocamlex的一部分_Ocaml_Ocamlyacc_Ocamllex - Fatal编程技术网

访问匹配字符串ocamlex的一部分

访问匹配字符串ocamlex的一部分,ocaml,ocamlyacc,ocamllex,Ocaml,Ocamlyacc,Ocamllex,我试图安排ocamlex和ocamlyacc代码来扫描和解析一种简单的语言。我已经定义了相同的抽象语法,但是我发现很难扫描复杂的规则。这是我的密码 { type exp = B of bool | Const of float | Iszero of exp | Diff of exp*exp | If of exp * exp * exp } rule scanparse = parse |"true"| "false" as boolean

我试图安排ocamlex和ocamlyacc代码来扫描和解析一种简单的语言。我已经定义了相同的抽象语法,但是我发现很难扫描复杂的规则。这是我的密码

    {
    type exp = B of bool | Const of float | Iszero of exp | Diff of exp*exp |
    If of exp * exp * exp
    }

    rule scanparse = parse
    |"true"| "false" as boolean {B boolean}
    |['0'-'9']+ "." ['0'-'9']* as num {Const num}
    |"iszero" space+ ['a'-'z']+ {??}
    |'-' space+ '(' space* ['a'-'z']+ space* ',' space* ['a'-'z']+ space* ')' {??}

但我无法访问匹配字符串的某些部分。由于表达式声明是递归的,嵌套函数也没有帮助(?)。请帮助。

请详细说明我上面的评论,我觉得您似乎在尝试使用ocamlex来实现ocamlyacc的目的。我认为您需要在ocamlex中定义非常简单的标记(如布尔、数字和变量名),然后使用ocamlyacc来定义它们如何结合在一起,从而生成Iszero、Diff和If。ocamlex的功能不足以解析抽象语法定义的结构

更新


这里是我从OCaml.org上找到的一个ocamlyacc教程,这是一个非常好的支持:。我看了看,它看起来不错。(当我开始使用ocamlyacc时,我已经知道了yacc,所以我可以很快开始使用。)

我在这里没有看到任何ocamlyacc代码。这只是词法代码,不会处理任何嵌套的内容。为了它的价值。但事实上我不明白你的问题。谢谢,这回答了我的问题。请善意地提及一个很好的ocamlyacc教程。再次感谢!