全部,
在我的 Lex 文件中,我们将一些运算符识别为令牌,其中一些运算符是
":p"
and
":"
问题是任何以 :p like 开头的单词":presentation"
都不会被识别为
':' word /*grammar*/
并且由于返回的 lex 值":p"
作为下一个令牌而触发了解析错误
我该如何解决这种歧义?
全部,
在我的 Lex 文件中,我们将一些运算符识别为令牌,其中一些运算符是
":p"
and
":"
问题是任何以 :p like 开头的单词":presentation"
都不会被识别为
':' word /*grammar*/
并且由于返回的 lex 值":p"
作为下一个令牌而触发了解析错误
我该如何解决这种歧义?
相反,您应该定义一个词法分析器规则来匹配整个“符号”标记,即类似
:[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;
}