proper eof handling

This commit is contained in:
bronku 2025-11-25 13:05:01 +01:00
parent 6a66b63680
commit 1c21aede4b
8 changed files with 9 additions and 8 deletions

View file

@ -23,6 +23,7 @@ in { return yy::parser::token::TOK_KW_IF;}
\" { yymore(); BEGIN(STRING); } \" { yymore(); BEGIN(STRING); }
[0-9]+ { yylval->as<std::string>() = yytext; return yy::parser::token::TOK_NUMBER; } [0-9]+ { yylval->as<std::string>() = yytext; return yy::parser::token::TOK_NUMBER; }
[_a-zA-Z]+ { yylval->as<std::string>() = yytext; return yy::parser::token::TOK_IDENTIFIER; } [_a-zA-Z]+ { yylval->as<std::string>() = yytext; return yy::parser::token::TOK_IDENTIFIER; }
<<EOF>> { return yy::parser::token::TOK_EOF; }
. { /* the last rule, ignore anything else (there should be nothing) */} . { /* the last rule, ignore anything else (there should be nothing) */}
<STRING>\"\" { yymore(); } <STRING>\"\" { yymore(); }

View file

@ -13,9 +13,9 @@ void dump_tokens(Scanner &scanner)
while (true) while (true)
{ {
int tok = scanner.lex(&lval); int tok = scanner.lex(&lval);
if (tok == Parser::token::TOK_YYEOF) if (tok == Parser::token::TOK_EOF)
{ {
std::cout << "NEWLINE\nEOF"; std::cout << Parser::symbol_name(static_cast<kind>(tok));
break; break;
} }

View file

@ -1,3 +1,3 @@
hello = 42 hello = 42
name = "world" name = "world"
x + y - z x + y - z

View file

@ -2,4 +2,4 @@ def function_name():
if condition: if condition:
return value return value
for item in list: for item in list:
print(item) print(item)

View file

@ -1,3 +1,3 @@
x == y != z < > <= >= x == y != z < > <= >=
a + b - c * d / e % f a + b - c * d / e % f
( ) [ ] { } , : . ; ( ) [ ] { } , : . ;

View file

@ -1,3 +1,3 @@
42 3.14 0xFF 0b1010 42 3.14 0xFF 0b1010
"hello" 'world' """multiline""" "hello" 'world' """multiline"""
'test' "escaped\"quote" 'test' "escaped\"quote"

View file

@ -5,4 +5,4 @@ def calculate(a, b=10):
return result return result
# This is a comment # This is a comment
x = calculate(5, 15) x = calculate(5, 15)

View file

@ -2,4 +2,4 @@ _private = "valid"
var123 = 456 var123 = 456
CamelCase = True CamelCase = True
snake_case = False snake_case = False
very_long_variable_name_123 = "test" very_long_variable_name_123 = "test"