1. ホーム
  2. parsing

[解決済み] トークナイザー」「パーサー」「レキサー」とは何か、どのような関係にあり、どのように使われるのか、明確な定義をお探しですか?

2022-04-22 20:26:25

質問

トークナイザー、パーサー、レキサーとは何か、またどのような関係にあるのか(例えば、パーサーはトークナイザーを使うのか、あるいはその逆か)、明確な定義を探しています。私は、データ宣言と定義を抽出するために、c/hのソースファイルを通過するプログラムを作成する必要があります。

しかし、文法規則、解析木、抽象構文木のような基本的な概念と、それらがどのように相互に関連しているかを把握するのに非常に苦労しています。最終的には、これらの概念は実際のプログラムに格納される必要がありますが、1)どのように見えるのか、2)一般的な実装があるのか。

これらのトピックについてWikipediaを見たり、LexやYaccのようなプログラムを見ていますが、コンパイラのクラスを通ったことがない(EE専攻)ので、何が起こっているのか完全に理解するのは難しいと感じています。

どのように解決するのですか?

トークナイザーは、テキストのストリームをトークンに分割し、通常は空白文字(タブ、スペース、改行)を探します。

レキサは基本的にトークナイザですが、通常はトークンに余分なコンテキストを付加します(このトークンは数値、このトークンは文字列リテラル、この他のトークンは等号演算子など)。

パーサーは、レキサーからトークンのストリームを受け取り、元のテキストで表される(通常)プログラムを表す抽象構文木に変換します。

最後に確認したところ、このテーマに関する最高の書籍は "コンパイラ。原則、テクニック、ツール" 通常、「ドラゴンブック」の名で知られています。