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 err != nil { return } | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if lexer.tokens[len(lexer.tokens) - 1].kind != TokenKindNewline { | ||||||
|  | 		lexer.addToken(Token { kind: TokenKindNewline }) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -119,6 +123,21 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) { | |||||||
| 		} | 		} | ||||||
| 	case '\n': | 	case '\n': | ||||||
| 		// line break | 		// 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. | 		// TODO: if last line was blank, (ony whitespace) discard. | ||||||
| 		lexer.addToken (Token { | 		lexer.addToken (Token { | ||||||
| 			kind: TokenKindNewline, | 			kind: TokenKindNewline, | ||||||
|  | |||||||
| @ -45,6 +45,7 @@ func TestTokenizeAll (test *testing.T) { | |||||||
| 		Token { kind: TokenKindRBracket }, | 		Token { kind: TokenKindRBracket }, | ||||||
| 		Token { kind: TokenKindLBrace }, | 		Token { kind: TokenKindLBrace }, | ||||||
| 		Token { kind: TokenKindRBrace }, | 		Token { kind: TokenKindRBrace }, | ||||||
|  | 		Token { kind: TokenKindNewline }, | ||||||
| 		Token { kind: TokenKindPlus }, | 		Token { kind: TokenKindPlus }, | ||||||
| 		Token { kind: TokenKindMinus }, | 		Token { kind: TokenKindMinus }, | ||||||
| 		Token { kind: TokenKindIncrement }, | 		Token { kind: TokenKindIncrement }, | ||||||
| @ -63,6 +64,7 @@ func TestTokenizeAll (test *testing.T) { | |||||||
| 		Token { kind: TokenKindLogicalOr }, | 		Token { kind: TokenKindLogicalOr }, | ||||||
| 		Token { kind: TokenKindBinaryAnd }, | 		Token { kind: TokenKindBinaryAnd }, | ||||||
| 		Token { kind: TokenKindLogicalAnd }, | 		Token { kind: TokenKindLogicalAnd }, | ||||||
|  | 		Token { kind: TokenKindNewline }, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if len(tokens) != len(correct) { | 	if len(tokens) != len(correct) { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user