我很难理解ANTLR,我正试图匹配这句话:
name "some_name" module ....
语法文件如下所示:
swdFile : nameDecl module* EOF;
nameDecl: NAME DBL_QUOTE appName DBL_QUOTE;
appName: TEXT;
module: MODULE;
DBL_QUOTE : '\"';
NAME:'name';
MODULE:'module';
TEXT : ('a'..'z'|'A'..'Z')+ ;
这很好用,但有一个小故障,我似乎无法理解。如果我尝试解析此文本,则会失败,因为它将引用的文本作为标记匹配:
name "module" module ...
为什么?我特意告诉它,引号之间的内容是纯文本,它应该匹配TEXT令牌。
答案 0 :(得分:1)
词法分析器不会驱动词法分析器。所以你的输入"module"
被标记为如下:
DBL_QUOTE
MODULE
DBL_QUOTE
因此与解析器规则nameDecl: NAME DBL_QUOTE appName DBL_QUOTE;
不匹配。字符串文字通常由词法分析器处理,在这种情况下,您不会遇到问题:
...
nameDecl : NAME STRING;
...
STRING : '"' ~'"'* '"';
NAME : 'name';
MODULE : 'module';
...