首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BNFC生成的语法在最简单的例子中失败

BNFC生成的语法在最简单的例子中失败
EN

Stack Overflow用户
提问于 2016-05-03 22:18:54
回答 1查看 149关注 0票数 0

我想用haskell为一种简单的命令式语言编写一个解释器。为此,我首先为工具BNFC (http://bnfc.digitalgrammars.com/)编写了该语言的语法。

该语法的一部分用于算术表达式,例如:

代码语言:javascript
复制
EAdd.     Expr ::= Expr "+" Expr ;
EMinus.   Expr ::= Expr "-" Expr ;
EMul.     Expr ::= Expr "*" Expr ;
ENum.     Expr ::= Integer ;

有了这些,我就可以运行BNFC工具并通过提供的脚本对其进行测试。它成功地解析了算术运算。

但是,如果我添加另一节(例如使用类型):

代码语言:javascript
复制
Tint.    Type ::= "int" ;

然后将expr secion,算术操作不再解析(在1+2上测试时,它说"Parse failed.这里的一些标记在1+2之前的第1行语法错误“)

为什么会发生这种事?怎么修呢?

重新措辞:

为什么这样的语法:

代码语言:javascript
复制
TInt.  Type ::=  "int" ;
EAdd.  Expr ::= Expr "+" Expr ;
ENum.  Expr ::= Integer ;

是否使用bnfc正确解析1 + 1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-05 14:56:01

如果没有entrypoint声明,bnfc将使用语法中定义的第一个类别作为测试脚本中的入口点。

也就是说,如果在文件顶部添加Tint. Type ::= "int" ;,bnfc生成的脚本将尝试解析Type,而不是Expr

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37015361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档