2012-05-07 5 views
0

すべて、この演算子の一部であるトークンとして、我々はいくつかの演算子を認識し、ファイル私のレックスでレックス - 認識ambiguantトークン

":p" 
and 
":" 

問題は、任意の単語の魔女から始まるということです:":presentation"のようなpは

':' word    /*grammar*/ 

として認識され、パースエラーが

として次のトークンにより返さlexの値 ":p"にtriggedされません

どうすればこの曖昧さを解決できますか?

答えて

1

あなたが代わりにあなたがする必要がある場合はそれを、あなたが:pのために、このルールのチェックを行うことができますし、特殊なケース、すなわち、全体の「シンボル」トークンと一致するように

:[a-zA-Z_][a-zA-Z0-9_]* { yylval.symbol = strdup(yytext + 1); return SYMBOL; } 

のようなものを字句解析ルールを定義する必要があります例えば:することができます

:[a-zA-Z_][a-zA-Z0-9_]* { 
    if (strcmp(yytext, ":p") == 0) { 
     return OP_P; 
    } 

    yylval.symbol = strdup(yytext + 1); 
    return SYMBOL; 
} 
+0

はい、実際には私はすでにこれを行って、私は返す私は(あなたの例ではSYMBOL)私の質問にTOKE WORDを書いたとして、問題は、私はLEXでTOWルールを持っているとということである「P」を両方で検証されます – Aymanadou

+1

私はあなたが短いルールを削除し、 *長い方をチェックしてください。私は自分の答えを1秒間見直します。 – Ashe

+1

@Aymanadou:今見てください。 – Ashe

関連する問題