解析器定义规则中的整数 - Ocaml

时间:2013-06-17 20:07:53

标签: ocaml ocamlyacc

我在为解析器编译以下规则时遇到了问题:

%%

EXPR:

  | expr ASN expr { Asn ($1, $2) }

这是一个赋值规则,它取一个整数,然后是赋值(等号)和一个表达式,如我的AST所定义:

输入expr =      asn of int * expr

当然,编译器抱怨是因为我定义了“ expr ASN expr”,第一个参数应该是整数,而不是表达式。但是,我无法找出指定它的语法。

如果有人能引导我朝着正确的方向前进,我会非常感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

您没有提供足够的详细信息来给出一个好的答案。整数是什么意思?我假设你的意思是整数字。

假设你的词法定义有一个名为INT的代表整数文字的标记,你可能想要这样的东西。

expr:
    | INT ASN expr { Asn ($1, $2) }

答案 1 :(得分:0)

你可能想要的是作为:

type expr = Asn of var * int

然后在解析器中将expr定义为:

expr:
  | VAR ASN INT { Asn ($1, $2) }
在词法分析器中你应该将VAR定义为字符串,将INT定义为整数文字,就像例子一样:

| [a-zA-z]+ { VAR($1) }
| [0-9]+ as i { INT(int_of_string i) }