Go 言語で作るインタプリタ
Lexical Analysis(字句解析)
https://en.wikipedia.org/wiki/Lexical_analysis
lexer, tokenizer 又は scanner などと呼ばれるものを使って、ソースコード等(sequence of characters)をトークン(sequence of tokens)に変換すること
別名、lexing 又は tokenization ともいう。
lex x = 5 + 5;
上記をトークンで表すと、例えば次のような形になる。
[
LET,
IDENTIFIER("X"),
EQUAL_SIGN,
INTEGER(5),
PLUS_SIGN,
INTEGER(5),
SEMICOLON
]
トークンの定義
出現が予想されるトークンを定義する。
package token
type TokenType string
type Token struct {
Type TokenType
Literal string
}
const (
ILLEGAL = "ILLEGAL" // 解析不能な字句
EOF = "EOF"
// 識別子
IDENT = "IDENT" // x, y など
// リテラル
INT = "INT" // 整数 1, 2, 3 など
// 演算子
ASSIGN = "="
PLUS = "+"
// デリミタ
COMMA = ","
SEMICOLON = ";"
LPAREN = "("
RPAREN = ")"
LBRACE = "{"
RBRACE = "}"
// キーワード
FUNCTION = "FUNCTION"
LET = "LET"
)