1

我有一个在 C# 中行走 ANTLR AST 的教程中大致定义的语法?:

grammar Test; 

options 
{
language = 'CSharp3'; 
output=AST; 
} 
public expr : mexpr (PLUS^ mexpr)* SEMI! 
; 
mexpr 
: atom (STAR^ atom)* 
; 
atom: INT 
; 
//class csharpTestLexer extends Lexer; 
WS : (' ' 
| '\t' 
| '\n' 
| '\r') 
{ $channel = Hidden; } 
; 
LPAREN: '(' 
; 
RPAREN: ')' 
; 
STAR: '*' 
; 
PLUS: '+' 
; 
SEMI: ';' 
; 
protected 
DIGIT 
: '0'..'9' 
; 
INT : (DIGIT)+ 
;

这建立了,但让我没有parser.expr_result我所期望的课程,并parser.expr()返回AstParserRuleReturnScope我做错了什么?是选项吗?工具命令行选项?还要别的吗?

4

1 回答 1

1

ANTLR 3.3 声明规则expr如下:

    public TestParser.expr_return expr()

ANTLR 3.4 是这样声明的:

    public AstParserRuleReturnScope<object, IToken> expr()

这是 的定义TestParser.expr_return

    public class expr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>
    {
        private object _tree;
        public object Tree { get { return _tree; } set { _tree = value; } }
    }

该类AstParserRuleReturnScope看起来等同于生成的expr_return类。

于 2012-12-04T17:11:37.170 回答