这很简单。我通过发明一种可以识别单个单词的语法来学习ANTLR4。但为什么它不匹配我的名字?它会打印[ ]
。
我正在使用Antlr 4和C#4.5。
grammar MyFirstGrammar;
/*
* Parser Rules
*/
compileUnit
: ID
;
/*
* Lexer Rules
*/
ID : [A-Za-z]+ ;
WS : ' ' -> skip ;
static class Program
{
private static void Main()
{
var stream = new AntlrInputStream("amy");
var lexer = new Grammars.MyFirstGrammarLexer(stream);
var tokens= new CommonTokenStream(lexer);
var parser = new Grammars.MyFirstGrammarParser(tokens);
var root = parser.compileUnit();
Debug.WriteLine(root);
}
}
答案 0 :(得分:2)
嗯...... 可行,但RuleContext
类未在the way you expect中定义ToString
。
ANTLR生成的CompileUnitContext
类扩展了ParserRuleContext
,扩展了RuleContext
。
试试这个:
Debug.WriteLine(root.ToStringTree(parser));
它将打印parse tree:
(compileUnit amy)
或许你只是在寻找这个:
Debug.WriteLine(root.GetText());
将按预期打印amy
。 :)