2017-04-24 84 views
0

我正在使用ANTLR4作为项目,但我的任务是我不太了解。我有一个词法分析规则标记化以下划线或字母开头的内容,不能以'xml'开头,并且可以包含句点,破折号,字母,数字和下划线。我如何确保开头是一个字母或下划线,并确保它不是'xml'?ANTLR4特定位置的特定字符

+0

这个问题很抽象。你能举一些具体的例子吗? – Rnet

+0

我想具体怎么去识别一个以下划线或字母开头但并不以字母'xml'开头的字符串。因此,它会接受'_hello'和'hello',但不接受'xmlhello' – Alex5775

+0

您可以在定义令牌时使用负面预见正则表达式模式。例如:^(?! xml)。+将匹配任何不以xml开头的东西 – Rnet

回答

0

语法:

grammar Expr; 
prog: word+ EOF; 
word : STRING ; 
STRING : ~[xml]STRINGCHAR+; 
WS : [ \t\r\n]+ -> skip; 
fragment 
STRINGCHAR : [_a-z] ; 

匹配“男孩”和“_girl”,而不是“xmlboy”通过明确排除〜运营商定义字符串。