1

O'ReillyからFlex&Bisonを購入しましたが、パーサーの実装に問題があります(トークンに分解することは大したことではありませんでした)。

巨大なバイナリ文字列があり、ビットを足し合わせる必要があるとします。すべてのビットはトークンです。

 [0-1] { return NUMBER;}

1101010111111

または、そのことについては、「操作」のないトークンのコレクション。

そのような文法は正しいでしょうか?

calclist :
         | calclist expr EOL {eval($2)}
expr: NUMBER
      |expr NUMBER { $$=$1+$2 }

またはそれを行うためのより良い方法はありますか?

4

1 に答える 1

2

例のlexルール"[0-1]{return NUMBER;}"はyylvalを設定しないため、文法でその値を使用する場合(ルール "expr NUMBER {$$ = $ 1 + $2;}で使用する場合と同様) ")ゴミが出ます。

一般的に、あなたがしていることは正しいですが、あなたが選んだタスクは非常に些細なことなので、lex/bisonは深刻なやり過ぎです。

于 2009-10-05T20:38:49.367 に答える