1

私はドラゴン ブックを勉強していて、式パーサーを書くのが待ちきれません。

負の数値入力を処理するために、レクサーは記号「-」に遭遇したときに数字を読み取り、数値トークンを返します。

"-4+2" は (-4,number) (+,operator) (2,number) を取得します

しかし、「4-2」ほど簡単なことはできないことがわかりました。

(4,number) (-2,number) 構文が間違っています。

私の解決策の 1 つは、最初のトークンがマイナスの場合にゼロを追加するなど、式を評価する前に前処理を行うことです。皆さんは、この状況をどのように対処しているのか気になります。

ありがとう。

4

2 に答える 2

3

次の文法が必要ですが"-" number、トークンにしないでください。

number := DIGIT+

unary := number
unary := "-" unary

expr := expr "+" unary
expr := expr "-" unary
...

単項式があるため、演算子優先文法ではありません。より複雑なパーサーで解析する必要があります。

于 2013-05-05T23:03:06.057 に答える
2

私の字句解析器は、記号「-」を満たすと数字を読み取り、負の数を返します

しないでください。単項演算子は、レクサーではなくパーサーで処理する必要があります。

私の解決策の 1 つは、最初のトークンがマイナスの場合にゼロを追加するなど、式を評価する前に前処理を行うことです。

いいえ、問題を解決してください。

穴に落ちたら、掘るのをやめましょう。

于 2013-05-05T22:27:56.187 に答える