0

全部,

在我的 Lex 文件中,我们将一些运算符识别为令牌,其中一些运算符是

":p" 
and 
":"  

问题是任何以 :p like 开头的单词":presentation"都不会被识别为

':' word             /*grammar*/

并且由于返回的 lex 值":p"作为下一个令牌而触发了解析错误

我该如何解决这种歧义?

4

1 回答 1

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;
}
于 2012-05-07T12:23:34.567 回答