2

私はおもちゃの言語用のおもちゃのコンパイラを書いています。JavaScript 構文があるとしましょう。

ソースファイルが次のようになっているとしましょう:

var val = 123;

私の単純なコンパイラは、Tokenizer と Parser で構成されます (今のところ)。

Tokenizer は、言語キーワード全体を返す必要がありますか?varまたは文字ごとに ( v, a, r) ?

遅かれ早かれ、キーワードやリテラルなどを認識しなければならなくなるでしょう。

4

2 に答える 2

4

トークナイザーの要点は、(文字の) 入力ストリームを受け取り、文法分析に使用できるトークンを提供することです。

したがって、トークナイザーが次の行に沿って何かを提供することを期待できます。

T_KEYWORD_VAR
T_VARIABLE(val)
T_KEYWORD_EQUALS
T_INTEGER(123)
T_KEYWORD_SEMICOLON
于 2013-09-16T09:01:48.077 に答える
3

トークナイザーは通常、キーワード全体 (= tokens ) を既に返しているはずです。

そうすることに不利な点はありません: トークナイザーがそれが言語キーワード (数字などではない) であると判断したらすぐに、既に検出に成功したものを部分的に分割して、この情報を「弱める」必要があるのはなぜですか;)

したがって、より一般的には、トークナイザーが可能な限り大きな構成要素を出力できるようにすることを躊躇しないでください。これ以上の意味を与えない限り、それはパーサーに任せるべきです。

于 2013-09-16T09:02:10.060 に答える