1

Flex でいくつかの単語 (「車」、「バス」、「電車」など) を除くすべての単語を検索する必要があります。それを行う方法について何かアイデアはありますか?

4

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