首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Antlr非LL(*)决定

Antlr非LL(*)决定
EN

Stack Overflow用户
提问于 2011-11-04 22:03:22
回答 1查看 714关注 0票数 2

我在为我的编程语言创建一部分ANTLR语法时遇到了一些困难。

type声明的第二部分发生时,我得到了错误:

代码语言:javascript
复制
public type
    :   ID ('.' ID)* ('?')? -> ^(R__Type ID ID* ('?')?)
    |   '(' type (',' type)*  ')' ('?')? -> ^(R__Type type* ('?')?)
    ;

我试着去匹配:

(System.String, System.Int32) (

  • )类似于System.String (工作良好)的行
  • 元组

此错误发生在树的上方,并声明:

[fatal] rule statement has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-05 07:19:27

对,我通过编辑处理变量声明的规则,设法在树上稍早地修复了这个问题:

代码语言:javascript
复制
'my' ID (':' type '=' constant | ':' type | '=' constant) -> ^(R__VarDecl ID type? constant?)

所以它的工作原理是:

代码语言:javascript
复制
'my' ID
(
   ':' type ('=' constant)?
|   '=' constant
) -> ^(R__VarDecl ID type? constant?)

在这里,我从句法谓词的例子中得到了这个想法:

https://wincent.com/wiki/ANTLR_predicates

幸运的是,我最终不需要谓词!

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

https://stackoverflow.com/questions/8016224

复制
相关文章

相似问题

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