Antlr版本:antlr-dotnet-tool-3.5.0.2
TestGrammar.g
lexer grammar TestGrammar;
options
{
language=CSharp3;
backtrack=true;
}
DOT
: '.'
;
NUMBER
: ( '0'..'9' )+ ('.' ( '0'..'9' )+)?
;
WS
: (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=Hidden;}
;
C#代码:
var lexer = new TestGrammar(new ANTLRStringStream("2..3"));
while (true)
{
var token = lexer.NextToken();
Console.WriteLine(token);
if (token.Type == -1)
break;
}
结果:
[@-1,3:3='3',<5>,1:3]
[@-1,4:4='<EOF>',<-1>,1:4]
所以,我用输入
测试这个语法2..3
我希望结果如下:
NUMBER["2"] DOT["."] DOT["."] NUMBER["3"]
那么,我做错了什么?谢谢!
答案 0 :(得分:0)
使用Java目标进行测试:
TestGrammar lexer = new TestGrammar(new ANTLRInputStream("2..3"));
for (Token t : lexer.getAllTokens()) {
System.out.printf("%s -> %s\n", t.getText(), TestGrammar.VOCABULARY.getSymbolicName(t.getType()));
}
产生以下输出:
2 -> NUMBER . -> DOT . -> DOT 3 -> NUMBER
所以,语法是正确的。我怀疑C#运行时会产生除我发布的内容以外的任何内容(使用C#等效测试类)。如果它仍然无效,请编辑您的问题并添加一些代码,演示如何重现您获得的错误。