0

全て、

私のLexファイルでは、一部の演算子をトークンとして認識しています。この演算子の一部は

":p" 
and 
":"  

問題は、魔女が:pで始まる単語は、次のよう":presentation"に認識されないことです。

':' word             /*grammar*/

":p"次のトークンとして返されたlex値が原因で、解析エラーがトリガーされます

このあいまいさをどのように解決できますか?

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 に答える