我想用haskell为一种简单的命令式语言编写一个解释器。为此,我首先为工具 BNFC ( http://bnfc.digitalgrammars.com/ ) 编写了该语言的语法。
该语法的一部分专用于算术表达式,例如:
EAdd. Expr ::= Expr "+" Expr ;
EMinus. Expr ::= Expr "-" Expr ;
EMul. Expr ::= Expr "*" Expr ;
ENum. Expr ::= Integer ;
有了这个,我可以运行 BNFC 工具并通过提供的脚本对其进行测试。它成功地解析算术运算。
但是,如果我添加另一个部分(比如说类型):
Tint. Type ::= "int" ;
然后放 expr 部分,算术运算不再解析(在 1 + 2 上测试时,它说“解析失败...... [这里的一些标记] 1 + 2 之前的第 1 行的语法错误”)
为什么会这样?如何解决?
改写:
为什么这样的语法:
TInt. Type ::= "int" ;
EAdd. Expr ::= Expr "+" Expr ;
ENum. Expr ::= Integer ;
1 + 1
使用 bnfc无法正确解析?