访问匹配字符串ocamlex的一部分
我试图安排ocamlex和ocamlyacc代码来扫描和解析一种简单的语言。我已经定义了相同的抽象语法,但是我发现很难扫描复杂的规则。这是我的密码访问匹配字符串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
{
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教程。再次感谢!