1

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

%%

表达式:

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

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

type expr = Asn of int * expr

当然,编译器会抱怨,因为我正在定义“ expr ASN expr”,第一个参数应该是整数,而不是表达式。但是,我无法弄清楚指定这一点的语法。

如果有人能引导我朝着正确的方向前进,我将不胜感激。

谢谢!

4

2 回答 2

1

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

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

expr:
    | INT ASN expr { Asn ($1, $2) }
于 2013-06-17T20:15:59.973 回答
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) }
于 2013-06-18T00:21:54.203 回答