Lex - 识别模糊的令牌

时间:2012-05-07 10:07:31

标签: bison yacc lex flex-lexer

所有

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

":p" 
and 
":"  

问题在于,任何一个词开始于:p ":presentation"不被识别为

':' word             /*grammar*/

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

我该如何解决这种歧义?

1 个答案:

答案 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;
}