我在为解析器编译以下规则时遇到了问题:
%%
EXPR:
| expr ASN expr { Asn ($1, $2) }
这是一个赋值规则,它取一个整数,然后是赋值(等号)和一个表达式,如我的AST所定义:
输入expr = asn of int * expr
当然,编译器抱怨是因为我定义了“ expr ASN expr”,第一个参数应该是整数,而不是表达式。但是,我无法找出指定它的语法。
如果有人能引导我朝着正确的方向前进,我会非常感激。
谢谢!
答案 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) }