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

时间:2013-07-05 15:21:36

标签: ocaml ocamlyacc ocamllex

我正在尝试安排ocamllex和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* ')' {??}

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

1 个答案:

答案 0 :(得分:2)

为了详细说明我上面的评论,我觉得你在尝试使用ocamllex来做ocamlyacc的用途。我认为你需要在ocamllex中定义非常简单的标记(比如布尔值,数字和变量名),然后使用ocamlyacc来定义它们如何组合起来制作Iszero,Diff和If之类的东西。 ocamllex的功能不足以解析抽象语法定义的结构。

<强>更新

这是我从OCaml.org链接的ocamlyacc教程,这是一个非常好的认可:OCamlYacc tutorial。我仔细研究了它看起来很好。 (当我开始使用ocamlyacc时,我已经知道了yacc,所以我能够很快地进行。)