1

プログラミング言語クラスの割り当てとして、Clite の構文アナライザーを実装しています。入力スキャナーから文字列を引数として受け取り、それが予期されるトークンであるかどうかをチェックする match() 関数を備えた再帰降下パーサーを使用しています。そうでない場合は、エラー メッセージを返します。

アルファベットのセットを宣言しようとしてきたので、アルファベットの各文字を一致させる必要はありません。このようなもの:

void letter(){
    if(currentToken==LETTER){
        match(LETTER);
    }
    else
        error();
}

#define で試してみましたが、機能していないことに気付きました

#define LETTER "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"

union や typedef でも試してみましたが、できませんでした。何か案は?

4

1 に答える 1

1

http://www.cplusplus.com/reference/cctype/isalpha/

int isalpha ( int c );

文字がアルファベットかどうかをチェックする

また、関連する機能をチェックしてください: http://www.cplusplus.com/reference/cctype/

ところで、あなたがしようとしていたことは決してうまくいきません。

1) == は、「に含まれる」「のサブセットである」などのことを試みませんが、両方のオペランドが等しいことを要求します。

2) あなたが行っている #define は、配列、コンテナー、またはその他の種類のデータ構造を定義していないのに、なぜ機能するのでしょうか? これを行う必要がある場合は、 std::set を調べることができます。

于 2013-04-30T01:03:08.380 に答える