2017-11-03 9 views
-1

私は自分の言語のために小さなコンパイラを作ろうとしています。 私はすでにflexとbisonを使ってレクサーとパーサを書いていますが、パーサーではタイプチェックなどのためにどのように使用するのか分からないのでセマンティックアクションを使用していません。 私はセマンティックアナライザについて読んできました。パーサを使ってセマンティクス分析を実行するためには、どのステップを実行する必要があるのか​​を知りたいだけです。 NODE、ASTなどを作成する必要がありますか?その場合、どのようにするかの例をお勧めしますか?flexとbison:パーサーにセマンティクスアクションを追加する方法は?

答えて

0

基本的なbisonパーサーは、文法で記述された言語と入力が一致するかどうかブール型の答えを返すだけです。それ以上のことをしたい場合(例えば、何らかの方法で記述されたプログラムをコンパイルするなど)、セマンティックアクションを追加する必要があります。

bisonのセマンティックアクションは非常に柔軟性があります。これらは任意のコードで、必要な処理を行うことができます。だからあなたは、あなたのプログラムの目標が何であれ、それを達成するためにあなたがそれらの行動で何をしたいかを決める必要があります。

bisonセマンティックアクションの背後にある一般的な考え方は、関連付けられたルールが縮小されたときにパーサーが各アクションを実行するため、ルールが縮小されるときに認識されるようにアクションを設定できるということです。このようにして、縮小されたルールの「意味」を評価して何らかの効果を生み出すか、後で処理するために便利な形式でASTの断片を生成することができます。ルールアクションは、以前に削減されたルールアクションの結果にボトムアップ方式でアクセスできます。あなたがすることは、あなたが望むものによって決まります。

関連する問題