我真正的语法要复杂得多,但我可以解决我的问题。所以这是语法:
grammar test2;
options {language=CSharp3;}
@parser::namespace { Test.Parser }
@lexer::namespace { Test.Parser }
start : 'VERSION' INT INT project;
project : START 'project' NAME TEXT END 'project';
START: '/begin';
END: '/end';
WS : ( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
INT : '0'..'9'+;
NAME: ('a'..'z' | 'A'..'Z')+;
TEXT : '"' ( '\\' (.) |'"''"' |~( '\\' | '"' | '\n' | '\r' ) )* '"';
STARTA
: '/begin hello';
我想解析这个(例如):
版本 1 1
/开始项目
测试项目“描述在这里”
/结尾
项目
现在它不会像这样工作(不匹配的令牌异常)。如果我删除最后一个令牌 STARTA,它就可以工作。但为什么?我不明白。
非常感谢您的帮助。谢谢。