hakeの日記

Windows環境でプログラミングの勉強をしています。

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>
続きを読む