まえがき
少し期間があきましたが、前回の続きから始めます...
コンパイラー(リンカーも含む)
頑張って作りました!
ここでは「コンパイラー」と呼んでいますが、
やっていることはどちらかと言うと「build」(「compile?」+「link」)なので、
どう呼ぶのが正しいのでしょうか?
以下で引っかかった部分をピックアップします
字句解析(Tokenize)
再帰構造での探査は避けて、あくまでwhileループでそれぞれの構文に基づいてトークン化を行いました
構文解析(Parse)
式の解析
簡単に説明すると、
- 足し算、引き算「+」「-」
- 乗算、除算、剰余(「*」「÷」「%」)
- 比較演算(「==」「!=」「>=」)
- 論理演算(「&」「|」)
- その他(「!」「-」「(」「)」)
以上の層に分けて処理をします
例えば、以下の感じ...
function parse_mul(data, index)
{
result = [];
ret, index = parse_logic(data, index);
result.push(ret);
while (data[index] == Type_MUL)
{
index++;
ret, index = parse_logic(data, index);
result.push(ret);
}
}
翻訳(compile)
今回はhtml出力とexe出力を考えるうえで、機械語に変えてしまうと困るので、
ほとんどやっていない感じ?です...
結合(link)
ここに書くのが正しいのかはわかりませんが、以上によるデータをつかって出力を作成する感じです
おわり
今回はこれまでにします
続きは ここ から!
ありがとうございました