Ajisai コンパイラ育成日誌 第3日 字句解析
(今回のコード: day001-010/day003 )
前回はファイルからソースコードを読めるようにしたのでした。ただ、普通のコンパイラがやるような解析や変換はまだ何も行なっていません。そこで、今回は字句解析器を作っていきます。
とりあえず字句(トークン)の型を考えてみます:
type Span = {
srcPath: string;
srcContent: string;
start: number;
end: number;
};
type OpToken = {
tag: "+" | "-" | "*" | "/" | "%";
};
type ParenToken = {
tag: "(" | ")";
};
type IntToken = {
tag: "integer";
value: string;
};
type Token = (IntToken | OpToken | ParenToken) & { span: Span };
Span
型は、後でエラー表示をするときに、エラーが起きた箇所のソースコード中の位置を表示できるように、関係する情報をまとめた型です。各種トークンが共通して持っているフィールド span
に格納されます。