首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法LL(1)冲突

语法LL(1)冲突
EN

Stack Overflow用户
提问于 2016-09-07 17:45:47
回答 1查看 337关注 0票数 0

您好,我不明白为什么在assgnStmt生产中会有冲突。我正在使用coco/R,我得到了"LL1 warning in assgnStmt: ID is start &in of deletable structure“。谢谢。

代码语言:javascript
复制
 COMPILER program

 CHARACTERS
 Letter= 'a'..'z'.
 Digit= '0'..'9'.

 TOKENS
 NUM= Digit {Digit}.
 ID= Letter {Letter}.

 PRODUCTIONS  
 program
   = stmts
   .
  stmts = assgnStmt { assgnStmt ';' } .

  assgnStmt
     = {ID "==" }  expr
  .
  expr = term { ('+' | '-') term } .

  term = factor { ( '*' | '/'  ) factor  } .

  factor
     = '(' expr ')'
     | ID
     | NUM
     .
  END program.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 22:16:11

{ID "=="}是一个“可删除结构”,也就是说它是可选的。显然,它可以从ID开始。但是expr也可以从ID开始,如果{ID "=="}不存在,解析器必须尝试识别expr

LL解析器总是需要知道他们试图识别的产品是什么。但是,当解析器在此上下文中遇到ID时,它无法判断是期望{ID "=="}还是expr

这就是错误消息的含义。修复它更棘手,尽管不是不可能。你可以从尝试像ID {"==" ID} rest-of-expr这样的东西开始,但这只能识别一些赋值(正是exprID开头的那些赋值)。

(这就是为什么我觉得LL(1)解析器生成器不是很令人满意的一个例子。LR(1)解析器不会有这种语法问题。因此,我对Coco/R了解不够,无法提供更多建议。)

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

https://stackoverflow.com/questions/39366516

复制
相关文章

相似问题

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