0
我想在一个简单的命令式语言中编写一个在haskell中的解释器。 为此,我首先为该工具BNFC编写了该语言的Gramar(http://bnfc.digitalgrammars.com/)。该语法BNFC生成的语法在最简单的例子上失败
部分专门算术表达式,如:
EAdd. Expr ::= Expr "+" Expr ;
EMinus. Expr ::= Expr "-" Expr ;
EMul. Expr ::= Expr "*" Expr ;
ENum. Expr ::= Integer ;
刚走,我可以运行BNFC工具,并提供脚本来进行测试。它成功解析算术运算。
不过,如果我添加其他部分(让我们与类型说):
Tint. Type ::= "int" ;
,然后把EXPR secion,算术运算不再解析(1 + 2它说,在测试时“解析失败。 .. [一些标记在这里]在1 + 2之前的第1行的语法错误“)
为什么会发生?如何解决它?
改变措辞:
TInt. Type ::= "int" ;
EAdd. Expr ::= Expr "+" Expr ;
ENum. Expr ::= Integer ;
不能正确分析1 + 1
使用BNFC:为什么这么gramar
?