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.3exprは、次のようなルールを宣言しています。

    public TestParser.expr_return expr()

ANTLR3.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 に答える