Flex でいくつかの単語 (「車」、「バス」、「電車」など) を除くすべての単語を検索する必要があります。それを行う方法について何かアイデアはありますか?
1 に答える
0
これはしばらく答えられずに放置されており、lex/flex の新規ユーザーが開始時に遭遇する標準的な問題です。SOの他の場所にも明確な答えはありません。
問題は、予約語ではないすべての識別子をどのように一致させるかです。これは、ほぼすべてのコンパイラで発生する標準のコンピューター言語機能です。それを明確にする方法で表現されなかっただけです。コンパイラの構築では、flex を使用して、いくつかの単語 (「if」、「then」、「else」など) を除くすべての単語 (識別子とも呼ばれます) を検索する必要があります。これは、字句パターンが仕様に配置される順序によって実現されます。Flex のウィキペディア ページの主な例がこれを示しているほど一般的です。
次のようにします。
car return(CAR);
bus return(BUS);
train return(TRAIN);
[a-z]+ return(WORD);
ただし、これを別の順序で行うと、エラーが発生します。
[a-z]+ return(WORD);
car return(CAR);
bus return(BUS);
train return(TRAIN);
「車」、「バス」、「電車」はすでに WORD に含まれているため、一致させることはできません。
この状況は、言語の他の場所でも発生します。たとえば、記号 "="、">="、">"、"=="、"++"、"+"、"+=" などを考えてみましょう。語彙素を定義する順序にも注意する必要があります。エラーがないことを確認するためにフレックスで。
于 2015-01-23T10:35:20.400 に答える