diff --git a/src/lexer.l b/src/lexer.l index f38a5ba..bdc00f0 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -14,7 +14,7 @@ ^[ \t]*#.*\n { /* Ignore comment-only lines */ } -^[ \t]* { +^[ \t]+ { int col = indent_stack.calculateColumn(yytext, yyleng); auto action = indent_stack.updateIndentation(col); @@ -39,6 +39,8 @@ in { return yy::parser::token::TOK_KW_IN; } not { return yy::parser::token::TOK_KW_NOT; } and { return yy::parser::token::TOK_KW_AND; } or { return yy::parser::token::TOK_KW_OR; } +pass { return yy::parser::token::TOK_KW_PASS; } +else { return yy::parser::token::TOK_KW_ELSE; } \=\= { return yy::parser::token::TOK_EQ; } \!\= { return yy::parser::token::TOK_NE; } @@ -47,6 +49,16 @@ or { return yy::parser::token::TOK_KW_OR; } \<\= { return yy::parser::token::TOK_LTE; } \>\= { return yy::parser::token::TOK_GTE; } \= { return yy::parser::token::TOK_ASSIGN; } +\+\= { return yy::parser::token::TOK_PLUS_ASSIGN; } +\-\= { return yy::parser::token::TOK_MINUS_ASSIGN; } +\*\= { return yy::parser::token::TOK_MULTIPLY_ASSIGN; } +\/\= { return yy::parser::token::TOK_DIVIDE_ASSIGN; } +\%\= { return yy::parser::token::TOK_MODULO_ASSIGN; } +\&\= { return yy::parser::token::TOK_BIT_AND_ASSIGN; } +\|\= { return yy::parser::token::TOK_BIT_OR_ASSIGN; } +\^\= { return yy::parser::token::TOK_BIT_XOR_ASSIGN; } +\<\<\= { return yy::parser::token::TOK_LSHIFT_ASSIGN; } +\>\>\= { return yy::parser::token::TOK_RSHIFT_ASSIGN; } \+ { return yy::parser::token::TOK_PLUS; } \- { return yy::parser::token::TOK_MINUS; } \* { return yy::parser::token::TOK_MULTIPLY; } diff --git a/src/parser.y b/src/parser.y index 37e33f3..ce2e80b 100644 --- a/src/parser.y +++ b/src/parser.y @@ -27,8 +27,8 @@ %token IDENTIFIER %token STRING %token NUMBER -%token ASSIGN PLUS MINUS L_PAREN R_PAREN COLON EQ NE LT GT LTE GTE MULTIPLY DIVIDE MODULO L_BRACKET L_BRACE R_BRACKET R_BRACE DOT SEMICOLON COMMA BIT_NOT BIT_AND BIT_OR BIT_XOR LSHIFT RSHIFT -%token KW_DEF KW_IF KW_RETURN KW_FOR KW_IN KW_NOT KW_AND KW_OR +%token ASSIGN PLUS MINUS L_PAREN R_PAREN COLON EQ NE LT GT LTE GTE MULTIPLY DIVIDE MODULO L_BRACKET L_BRACE R_BRACKET R_BRACE DOT SEMICOLON COMMA BIT_NOT BIT_AND BIT_OR BIT_XOR LSHIFT RSHIFT PLUS_ASSIGN MINUS_ASSIGN MULTIPLY_ASSIGN DIVIDE_ASSIGN MODULO_ASSIGN BIT_AND_ASSIGN BIT_OR_ASSIGN BIT_XOR_ASSIGN LSHIFT_ASSIGN RSHIFT_ASSIGN +%token KW_DEF KW_IF KW_RETURN KW_FOR KW_IN KW_NOT KW_AND KW_OR KW_PASS KW_ELSE %token EOF NEWLINE INDENT DEDENT diff --git a/test/lexer/09.out b/test/lexer/09.out index d16fc8f..071607d 100644 --- a/test/lexer/09.out +++ b/test/lexer/09.out @@ -7,7 +7,7 @@ IDENTIFIER c COLON NEWLINE INDENT -IDENTIFIER pass +KW_PASS NEWLINE DEDENT EOF \ No newline at end of file diff --git a/test/lexer/11.out b/test/lexer/11.out index 8ebbac7..ea0e88d 100644 --- a/test/lexer/11.out +++ b/test/lexer/11.out @@ -38,4 +38,4 @@ IDENTIFIER g RSHIFT_ASSIGN NUMBER 10 NEWLINE -EOF +EOF \ No newline at end of file diff --git a/test/lexer/12.out b/test/lexer/12.out index ef590b8..b6e05be 100644 --- a/test/lexer/12.out +++ b/test/lexer/12.out @@ -16,4 +16,4 @@ L_BRACKET IDENTIFIER index R_BRACKET NEWLINE -EOF +EOF \ No newline at end of file diff --git a/test/lexer/13.out b/test/lexer/13.out index 445f335..efbdde2 100644 --- a/test/lexer/13.out +++ b/test/lexer/13.out @@ -38,4 +38,4 @@ COMMA NUMBER 3 R_BRACE NEWLINE -EOF +EOF \ No newline at end of file diff --git a/test/lexer/14.out b/test/lexer/14.out index f231594..948b426 100644 --- a/test/lexer/14.out +++ b/test/lexer/14.out @@ -1,5 +1,7 @@ STRING "line\nbreak" +NEWLINE STRING 'quote\'test' +NEWLINE STRING "unicode ☃ snowman" NEWLINE -EOF +EOF \ No newline at end of file diff --git a/test/lexer/15.out b/test/lexer/15.out index 4d8a482..884951b 100644 --- a/test/lexer/15.out +++ b/test/lexer/15.out @@ -13,4 +13,4 @@ INDENT KW_PASS NEWLINE DEDENT -EOF +EOF \ No newline at end of file