BLOCK_COMMENT : '/*' .*? '*/' -> skip;
EOL_COMMENT : '//' ~[\r\n]* -> skip;
WS: [ \n\t\r]+ -> skip;
program: usingDirectives? EOF;
usingDirectives: usingDirective+;
usingDirective: USING
fullyQualifiedType
(usingAlias | USING_ALL)?
END;
USING: 'using';
fullyQualifiedType: identifier (DOT identifier)*;
identifier: (LETTER | UNDERSCORE)
(LETTER | DIGIT | UNDERSCORE)*;
DOT: '.';
usingAlias: AS identifier;
USING_ALL: '.*';
AS: 'as';
END: ';';
LETTER: [a-zA-Z];
DIGIT: [0-9];
UNDERSCORE: '_';
这是我的语法。在
^{pr2}$这是我的测试数据。在
语法按预期工作,但是标识符中的每个字母都变成了一个单独的标记,这有点无用。在
如果我试图将identifier设置为lexer规则(identifier),那么在运行测试时会出现以下错误:
line 1:23 extraneous input 'as' expecting {'.', '.*', 'as', ';'}
即使我试图让标识符只有[a-zA-Z],没有子规则,也会发生同样的情况。在
如果重要的话,我使用Python3作为目标语言。 请指出任何其他菜鸟的错误,因为这是我第一个使用Antlr的项目。谢谢!在
现在,您告诉lexer生成一个适合标识符的字符集合,而不是作为一个整体的标识符。以下简化语法(lexer和parser)应该适合您:
下面是我用来检查的Java代码示例:
^{pr2}$下面是stdout的结果:
相关问题 更多 >
编程相关推荐