如何转换antlr v2至v3语法?

时间:2014-08-12 05:59:46

标签: java antlr3 antlr2

我在ANTLR的v2中有以下语法,我需要帮助将其转换为v3

expression
: ( simpleLookup
  | lookup
  )
  ( x:LSQRBRACKET^ {#x.setType(ATTRIBUTES);} attributesExpr RSQRBRACKET! )?
;enter code here

实际上我尝试过以下但不确定它是否相同,并且在尝试构建解析器时也会出现以下错误

expression
: ( simpleLookup
  | lookup
  )
  (x=LSQRBRACKET b=attributesExpr RSQRBRACKET )?) -> ^(ATTRIBUTES[$x] $a $b)?
;

并低于错误

expecting SEMI, found '->'
unexpected token: $
unexpected token: $
unexpected token: )

如何转换"!" in v3 from v2?

请帮助我提供专业知识.....

我还有一个问题是如何在语法级别编写v3中的树解析器,就像我们以前用以下格式编写的v2一样

class CustomTreeParser extends TreeParser;

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

grammar YourGrammarName;

options {
  output=AST;
}

tokens {
  ATTRIBUTES;
}

// ...

expression
 : ( simpleLookup
   | lookup
   )
   ( x=LSQRBRACKET^ {$x.setType(ATTRIBUTES);} attributesExpr RSQRBRACKET! )?
 ;

// ...
  

如何转换"!"在v3中从v2?

内联!运算符(从AST中排除某些规则/标记)在第3版中保持不变。

  

我还有一个问题是如何在语法级别编写v3中的树解析器,就像在v2中一样......

像这样:

options {
  output=AST;
}