- ベストアンサー
パーサとコンパイラの違いって?
C++を勉強中で、小さなソフトをいくつか作ったのですが、パーサという概念があることを知りました。 構文解析をするという点ではコンパイラと同じようなものに感じるのですが、パーサとコンパイラはどのように違うのでしょうか?? 詳しい方いらっしゃいましたらご教示頂けると幸いです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
パーサはコンパイラの一部ですね。Unix であれば yacc というプログラムでパーサの作成ができます。(最近は、bison とかいうらしいが、やはり yacc と呼ばなくては) コンパイラの内部では、パーサの出力をコードジェネレータに渡します。自分でコンパイラを作れるようになれば、自然に理解できるようになるでしょう。
その他の回答 (5)
parser(パーザー)が、近い発音だと思います。 パーザーは、コンパイラの一部です。 コンパイラは、おおまかにいって、 字句解析 構文解析 意味解析・式生成 式簡略化 コード生成 コード最適化 アセンブラソース出力 ですが、パーザーというのは、構文解析の部分のことです。 今日では、手書きでパーザーを書くということは、少なくなって、bisonなどで、文法記述をして、パーザーを生成させることが多いです。
- gon987
- ベストアンサー率16% (53/312)
#4 構文解析の後の意味解析が抜けている。 プリプロセッサとかも抜けているけどまぁ大雑把なら抜けててもいいかな。
- Tacosan
- ベストアンサー率23% (3656/15482)
非常に大雑把なコンパイラの動作: 1. レクサ (字句解析器) でソースを「トークン」という単位に分割する. 2. パーザ (構文解析器) でトークン列から「ソースファイルの構造」を組み立てる. <ここまでがフロントエンドで以下はバックエンド> 3. ソースファイルの構造をもとに生成物であるオブジェクトファイルを作る. 3'. 必要に応じてオプティマイザで最適化. だから, コンパイラの一部をとりだしたのがパーザ. なお, yacc と bison は別物なので, bison を yacc と呼ぶのはよくないと思います>#2.
- pick52
- ベストアンサー率35% (166/466)
パーサ(parser)とは構文解析器のことです。 例えば printf("0123456789\n"); というコードがあった場合、 printf という関数に対して "0123456789\n" という値(引数)を渡しているということを全体の 文法から分析・分解してコンパイラに渡します。 (簡単に大まかに説明していますが正確には微妙に異なります) コンパイラが直接上記の事を行えるわけではないんです。 逆に言えばパーサを変えれば論理上は同じコンパイラでも文法を 変更することができるともいえます。
- sakusaker7
- ベストアンサー率62% (800/1280)
パーザ(パーサ)はコンパイラの一部。
お礼
回答くださった方々ありがとうございましたm(_ _)m とても参考になりました。