0

yyparse()同じ入力ファイルで複数回呼び出しています。ファイルの最初からある時点まで解析を開始し、次に同じファイル内の別の場所にジャンプして(そこでいくつかの行を解析し)、元の位置に戻ってそこから再度解析を開始する必要があります。これは私が何度もやっています。を呼び出す前にyyparse()、同じ入力ファイルを新たに開いてから、解析を開始する必要がある位置をポイントしています。

元の位置に戻すのに問題があります。他の場所にジャンプすることはできますが、そこから元の位置に戻るのは問題です。私のパーサーは、戻っている間に別の場所に移動し、そこから数行を解析してから、元の位置に戻ります。これらの余分な行の解析を回避するにはどうすればよいですか?私はyyrestart();への新しい呼び出しの前に使用していますyyparse();

4

1 に答える 1

2

位置を変更する必要があるたびに解析を再開する代わりに、これをすべてレクサーで行うことができます。

ファイル内の別の場所を解析する必要がある場合は、現在のレクサー状態をスタックにプッシュし、新しいレクサー統計を必要な位置に設定します。完了したら、状態をスタックからポップして現在の状態にし、何も起こらなかったかのように解析を続けます。

考えられるより良い解決策は、おそらくソース ファイルを直接解析して AST を構築することです。そうすれば、セマンティック処理を簡単に実行したり、パーツを好きなように評価したりできます。これにより、レクサーとパーサーがはるかに単純になります。

于 2012-11-08T06:28:10.403 に答える