2012-05-07 71 views
0

所有,莱克斯 - 认识ambiguant令牌

在我的莱克斯文件中,我们认识到一些运营商作为标记一些这个操作是

":p" 
and 
":" 

的问题是,任何文字女巫始于:像":presentation" p是不承认

':' word    /*grammar*/ 

和解析错误被触发由于返回值法作为":p"下一个令牌

我该如何解决这个歧义?

回答

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; 
} 
+0

是,其实我已经做到了这一点,我回到我在我的问题(在你的例子SYMBOL)写的托克WORD的问题是,我有TOW规则LEX和“:p”可以由他们验证 – Aymanadou

+1

我的建议是,你删除了较短的规则,并添加一个检查*中的*较长的一个。我会修改我的答案,一秒钟。 – Ashe

+1

@Aymanadou:现在看看。 – Ashe