【发布时间】:2018-04-10 11:46:13
【问题描述】:
当一个规则在 antlr4 中匹配,并且你得到该规则的文本时,词法分析器通常会用
去除空格WS: [ \n\t\r]+ -> skip;
是否可以在解析树访问者中询问“这条规则是否跳过了任何空白?”
例如
WS: [ \n\t\r]+ -> skip;
ALPHA: [a-z];
NUMERIC: [0-9];
myrule: (ALPHA | NUMERIC)+;
然后在访问者中(我使用的是 C++):
antlrcpp::Any MyVisitor::visitMyrule(dlParser::MyruleContext *ctx) {
if (ctx->didSkipSomeWhitespace()) {
/* There was whitespace */
} else {
/* There was no whitespace */
}
return false;
}
所以:
f56fhj => no whitespace
o9f g66ff o => whitespace
我已经尝试获取标记的开始/停止索引,以便我可以将文本长度与进入其中的字符数进行比较,但停止标记并不总是可用,如果是则值不要与我期望的索引对齐,访问形成令牌的原始输入字符似乎并不简单。
【问题讨论】:
标签: c++ parsing antlr grammar antlr4