Go言語 - 字句解析プログラム
勉強がてら字句解析プログラムを作成してみました。
Lexser.Scan()を実行する毎に、sample.txtから一文字(rune)ずつ読み込み、1トークンを読み込んだら、そのトークンの書かれている行、桁、トークン種類、トークンリテラル文字列を表示します。
数字はNUMBERトークン、ダブルクォートで囲まれた文字列はSTRINGトークン、英字とアンダースコアで始まる英数字列はIDENTトークンとなります。ただし英数字列の内、TokenTableに登録されているものは予約語として対応する種類のトークンになります。
ファイル終端(EOF)に到達後にLexser.Scan()が実行された場合はEOFトークンが返されます。
sample.txt
package main import "fmt" var abc int abc = 10
結果
line: 1 col: 0 kind: IDENT str: package line: 1 col: 8 kind: IDENT str: main line: 3 col: 0 kind: IDENT str: import line: 3 col: 7 kind: STRING str: fmt line: 5 col: 0 kind: VAR str: var line: 5 col: 4 kind: IDENT str: abc line: 5 col: 8 kind: INT str: int line: 6 col: 0 kind: IDENT str: abc line: 6 col: 4 kind: OTHER str: = line: 6 col: 6 kind: NUMBER str: 10 line: 7 col: 0 kind: EOF str: <EOF> line: 7 col: 0 kind: EOF str: <EOF>