2

私は語彙スキャナーを書いている最中で、操作 (例: -) と符号付き数値 (例: ) をどのように区別するのか疑問に思っています-14。たとえば、次の行はどちらも有効です。

+12
12 +12

現在、私の字句スキャナーは次のように解析します。

+12
12 +12

ただし、プログラムの後半で 2 番目のステートメントの有効性をチェックするときに、無効としてフラグが立てられます。1 つの数値トークンの後に、隣接する演算子がなければ別のトークンを続けることはできません。私はそれらを次のようにスキャンしたいと思います:

+12
12 + 12

前の文字が演算子であるかどうかをチェックし、そうであれば符号付き数字トークンを生成し、そうでない場合は演算子の後に数字を生成するだけでこれを実装できますが、そうすると文脈自由文法の規則に反し、複雑さが大幅に増加します。私のスキャナーの。

数値トークンの一部であるかどうかを正しく判断する明確な方法で署名付きの数値をスキャンするにはどうすればよいですか?

4

1 に答える 1

2

私が扱ったほとんどのスキャナーは、標識をオペレーターとして扱います。したがって、-12 は単なる整数リテラルではなく、整数リテラルと単項符号演算子です。スキャナーをシンプルに保ちながら、問題を解決すると思います( + と - をトークンとして認識するだけです。パーサーは、後で使用するセマンティクスを解決できます)。

于 2013-12-28T08:20:53.363 に答える