Normalized whitespace tokens
This commit is contained in:
parent
0a31ea7bf8
commit
af6f170833
@ -54,6 +54,10 @@ func (lexer *LexingOperation) tokenize () (err error) {
|
||||
if err != nil { return }
|
||||
}
|
||||
|
||||
if lexer.tokens[len(lexer.tokens) - 1].kind != TokenKindNewline {
|
||||
lexer.addToken(Token { kind: TokenKindNewline })
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@ -119,6 +123,21 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
||||
}
|
||||
case '\n':
|
||||
// line break
|
||||
lastLineEmpty := true
|
||||
tokenIndex := len(lexer.tokens) - 1
|
||||
for lexer.tokens[tokenIndex].kind != TokenKindNewline {
|
||||
if lexer.tokens[tokenIndex].kind != TokenKindIndent {
|
||||
|
||||
lastLineEmpty = false
|
||||
break
|
||||
}
|
||||
tokenIndex --
|
||||
}
|
||||
|
||||
if lastLineEmpty {
|
||||
lexer.tokens = lexer.tokens[:tokenIndex]
|
||||
}
|
||||
|
||||
// TODO: if last line was blank, (ony whitespace) discard.
|
||||
lexer.addToken (Token {
|
||||
kind: TokenKindNewline,
|
||||
|
@ -45,6 +45,7 @@ func TestTokenizeAll (test *testing.T) {
|
||||
Token { kind: TokenKindRBracket },
|
||||
Token { kind: TokenKindLBrace },
|
||||
Token { kind: TokenKindRBrace },
|
||||
Token { kind: TokenKindNewline },
|
||||
Token { kind: TokenKindPlus },
|
||||
Token { kind: TokenKindMinus },
|
||||
Token { kind: TokenKindIncrement },
|
||||
@ -63,6 +64,7 @@ func TestTokenizeAll (test *testing.T) {
|
||||
Token { kind: TokenKindLogicalOr },
|
||||
Token { kind: TokenKindBinaryAnd },
|
||||
Token { kind: TokenKindLogicalAnd },
|
||||
Token { kind: TokenKindNewline },
|
||||
}
|
||||
|
||||
if len(tokens) != len(correct) {
|
||||
|
Reference in New Issue
Block a user