compex literals

master2
serr 2025-05-18 18:42:30 +03:00
parent 204a2badd6
commit b2de5ce92c
3 changed files with 18 additions and 7 deletions

View File

@ -14,7 +14,6 @@ void yyerror(const char *s) {
%} %}
DIGIT [0-9] DIGIT [0-9]
BIG_LETTER [A-Z]
LETTER [a-zA-Z_] LETTER [a-zA-Z_]
LETTER_OR_DIGIT [a-zA-Z0-9_] LETTER_OR_DIGIT [a-zA-Z0-9_]
@ -130,11 +129,21 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
} }
} }
[0-9]+\.[0-9]+ { {DIGIT}+\.{DIGIT}*i { /* Комплексные числа: 123.456i */
yylval.str = strdup(yytext);
return COMPLEX_LITERAL;
}
{DIGIT}+i { /* Комплексные числа: 123i */
yylval.str = strdup(yytext);
return COMPLEX_LITERAL;
}
{DIGIT}+\.{DIGIT}+ { /* Обычные float: 123.456 */
return FLOAT_LITERAL; return FLOAT_LITERAL;
} }
{DIGIT}+ { {DIGIT}+ { /* Целые числа */
return NUMBER; return NUMBER;
} }

View File

@ -22,7 +22,7 @@ void free_node(char *str) {
} }
%token SHORT_DECLARATION LBRACE RBRACE SEMICOLON ASSIGN LPAREN RPAREN COMMA COLON DOTS %token SHORT_DECLARATION LBRACE RBRACE SEMICOLON ASSIGN LPAREN RPAREN COMMA COLON DOTS
%token VAR FUNC RETURN STRING_LITERAL FLOAT_LITERAL NUMBER PACKAGE IMPORT %token VAR FUNC RETURN STRING_LITERAL FLOAT_LITERAL COMPLEX_LITERAL NUMBER PACKAGE IMPORT
%token INC DEC PLUS_EQ MINUS_EQ MUL_EQ DIV_EQ MOD_EQ %token INC DEC PLUS_EQ MINUS_EQ MUL_EQ DIV_EQ MOD_EQ
%token AMPERSAND_EQ PIPE_EQ XOR_EQ LSHIFT_EQ RSHIFT_EQ AND_NOT_EQ %token AMPERSAND_EQ PIPE_EQ XOR_EQ LSHIFT_EQ RSHIFT_EQ AND_NOT_EQ
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE %token FOR BREAK CONTINUE ARROW IF ELSE RANGE
@ -205,6 +205,7 @@ math_expr:
| LPAREN { printf("LPAREN\n"); } math_expr RPAREN { printf("RPAREN\n"); } | LPAREN { printf("LPAREN\n"); } math_expr RPAREN { printf("RPAREN\n"); }
| NUMBER { printf("NUMBER\n"); } | NUMBER { printf("NUMBER\n"); }
| FLOAT_LITERAL { printf("FLOAT LITERAL\n"); } | FLOAT_LITERAL { printf("FLOAT LITERAL\n"); }
| COMPLEX_LITERAL { printf("COMPLEX LITERAL\n"); }
| IDENTIFIER { printf("IDENTIFIER: %s\n", $1); } | IDENTIFIER { printf("IDENTIFIER: %s\n", $1); }
| IDENTIFIER INC { printf("POST-INCREMENT: %s++\n", $1); } | IDENTIFIER INC { printf("POST-INCREMENT: %s++\n", $1); }
| IDENTIFIER DEC { printf("POST-DECREMENT: %s--\n", $1); } | IDENTIFIER DEC { printf("POST-DECREMENT: %s--\n", $1); }
@ -271,6 +272,7 @@ type:
// literals // literals
literal: literal:
STRING_LITERAL { } STRING_LITERAL { }
| COMPLEX_LITERAL { }
| BOOL_LITERAL { } | BOOL_LITERAL { }
| FLOAT_LITERAL { } | FLOAT_LITERAL { }
| NUMBER { } | NUMBER { }

View File

@ -18,7 +18,7 @@ func test(a int, b string) {
func main() { func main() {
var a int; var a int;
a = 2+2*2-(1+10); a = 2+2*2-(1+10)+213i*2 - 2.123i;
a = a + 1; a = a + 1;
a = a; a = a;
} }