Formatting
git-svn-id: https://svn.tlawal.org/svn/monkey@15 f6afcba9-9ef1-4bdd-9b72-7484f5705bac
This commit is contained in:
parent
c7dbccbe71
commit
4f90d0cbd1
106
lexer/lexer.go
106
lexer/lexer.go
@ -9,63 +9,11 @@ type Lexer struct {
|
|||||||
current_char byte
|
current_char byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func new_token(TokenType token.TokenType, ch byte) token.Token {
|
|
||||||
return token.Token{Type: TokenType, Literal: string(ch)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l_lexer *Lexer) read_char() {
|
|
||||||
if l_lexer.read_position >= len(l_lexer.input) {
|
|
||||||
l_lexer.current_char = 0
|
|
||||||
} else {
|
|
||||||
l_lexer.current_char = l_lexer.input[l_lexer.read_position]
|
|
||||||
}
|
|
||||||
l_lexer.position = l_lexer.read_position
|
|
||||||
l_lexer.read_position += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l_lexer *Lexer) peek_char() byte {
|
|
||||||
if l_lexer.read_position >= len(l_lexer.input) {
|
|
||||||
return 0
|
|
||||||
} else {
|
|
||||||
return l_lexer.input[l_lexer.read_position]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l_lexer *Lexer) read_identifier() string {
|
|
||||||
position := l_lexer.position
|
|
||||||
for is_letter(l_lexer.current_char) {
|
|
||||||
l_lexer.read_char()
|
|
||||||
}
|
|
||||||
return l_lexer.input[position:l_lexer.position]
|
|
||||||
}
|
|
||||||
|
|
||||||
func is_letter(ch byte) bool {
|
|
||||||
return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_'
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l_lexer *Lexer) skip_whitespace() {
|
|
||||||
for l_lexer.current_char == ' ' || l_lexer.current_char == '\t' || l_lexer.current_char == '\n' || l_lexer.current_char == '\r' {
|
|
||||||
l_lexer.read_char()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l_lexer *Lexer) read_number() string {
|
|
||||||
position := l_lexer.position
|
|
||||||
for is_digit(l_lexer.current_char) {
|
|
||||||
l_lexer.read_char()
|
|
||||||
}
|
|
||||||
return l_lexer.input[position:l_lexer.position]
|
|
||||||
}
|
|
||||||
|
|
||||||
func is_digit(ch byte) bool {
|
|
||||||
return '0' <= ch && ch <= '9'
|
|
||||||
}
|
|
||||||
|
|
||||||
func New(input string) *Lexer {
|
func New(input string) *Lexer {
|
||||||
l := &Lexer{input: input}
|
l := &Lexer{input: input}
|
||||||
l.read_char()
|
l.read_char()
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l_lexer *Lexer) NextToken() token.Token {
|
func (l_lexer *Lexer) NextToken() token.Token {
|
||||||
var tok token.Token
|
var tok token.Token
|
||||||
@ -134,3 +82,55 @@ func (l_lexer *Lexer) NextToken() token.Token {
|
|||||||
l_lexer.read_char()
|
l_lexer.read_char()
|
||||||
return tok
|
return tok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func new_token(TokenType token.TokenType, ch byte) token.Token {
|
||||||
|
return token.Token{Type: TokenType, Literal: string(ch)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l_lexer *Lexer) read_char() {
|
||||||
|
if l_lexer.read_position >= len(l_lexer.input) {
|
||||||
|
l_lexer.current_char = 0
|
||||||
|
} else {
|
||||||
|
l_lexer.current_char = l_lexer.input[l_lexer.read_position]
|
||||||
|
}
|
||||||
|
l_lexer.position = l_lexer.read_position
|
||||||
|
l_lexer.read_position += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l_lexer *Lexer) peek_char() byte {
|
||||||
|
if l_lexer.read_position >= len(l_lexer.input) {
|
||||||
|
return 0
|
||||||
|
} else {
|
||||||
|
return l_lexer.input[l_lexer.read_position]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l_lexer *Lexer) read_identifier() string {
|
||||||
|
position := l_lexer.position
|
||||||
|
for is_letter(l_lexer.current_char) {
|
||||||
|
l_lexer.read_char()
|
||||||
|
}
|
||||||
|
return l_lexer.input[position:l_lexer.position]
|
||||||
|
}
|
||||||
|
|
||||||
|
func is_letter(ch byte) bool {
|
||||||
|
return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_'
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l_lexer *Lexer) skip_whitespace() {
|
||||||
|
for l_lexer.current_char == ' ' || l_lexer.current_char == '\t' || l_lexer.current_char == '\n' || l_lexer.current_char == '\r' {
|
||||||
|
l_lexer.read_char()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l_lexer *Lexer) read_number() string {
|
||||||
|
position := l_lexer.position
|
||||||
|
for is_digit(l_lexer.current_char) {
|
||||||
|
l_lexer.read_char()
|
||||||
|
}
|
||||||
|
return l_lexer.input[position:l_lexer.position]
|
||||||
|
}
|
||||||
|
|
||||||
|
func is_digit(ch byte) bool {
|
||||||
|
return '0' <= ch && ch <= '9'
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user