所有
在我的Lex文件中,我们将一些运算符识别为Tokens,其中一些运算符是
":p"
and
":"
问题在于,任何一个词开始于:p ":presentation"
不被识别为
':' word /*grammar*/
并且由于返回的lex值":p"
作为下一个令牌而触发了解析错误
我该如何解决这种歧义?
答案 0 :(得分:1)
您应该定义词法分析器规则以匹配整个“符号”标记,例如
:[a-zA-Z_][a-zA-Z0-9_]* { yylval.symbol = strdup(yytext + 1); return SYMBOL; }
如果需要,您可以检查此规则中:p
和特殊情况,例如:
:[a-zA-Z_][a-zA-Z0-9_]* {
if (strcmp(yytext, ":p") == 0) {
return OP_P;
}
yylval.symbol = strdup(yytext + 1);
return SYMBOL;
}