From b2de5ce92c1be27e20e8a6a126631d1c0fefe92e Mon Sep 17 00:00:00 2001 From: serr Date: Sun, 18 May 2025 18:42:30 +0300 Subject: [PATCH] compex literals --- analyzers/test/test.l | 19 ++++++++++++++----- analyzers/test/test.y | 4 +++- tests/test.txt | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/analyzers/test/test.l b/analyzers/test/test.l index 489d85f..5c6e542 100644 --- a/analyzers/test/test.l +++ b/analyzers/test/test.l @@ -14,7 +14,6 @@ void yyerror(const char *s) { %} DIGIT [0-9] -BIG_LETTER [A-Z] LETTER [a-zA-Z_] LETTER_OR_DIGIT [a-zA-Z0-9_] @@ -130,12 +129,22 @@ LETTER_OR_DIGIT [a-zA-Z0-9_] } } -[0-9]+\.[0-9]+ { - return FLOAT_LITERAL; +{DIGIT}+\.{DIGIT}*i { /* Комплексные числа: 123.456i */ + yylval.str = strdup(yytext); + return COMPLEX_LITERAL; } -{DIGIT}+ { - return NUMBER; +{DIGIT}+i { /* Комплексные числа: 123i */ + yylval.str = strdup(yytext); + return COMPLEX_LITERAL; +} + +{DIGIT}+\.{DIGIT}+ { /* Обычные float: 123.456 */ + return FLOAT_LITERAL; +} + +{DIGIT}+ { /* Целые числа */ + return NUMBER; } [ \t\r]+ ; // Пропускаем пробелы и табы diff --git a/analyzers/test/test.y b/analyzers/test/test.y index 07f4314..c553cc7 100644 --- a/analyzers/test/test.y +++ b/analyzers/test/test.y @@ -22,7 +22,7 @@ void free_node(char *str) { } %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 AMPERSAND_EQ PIPE_EQ XOR_EQ LSHIFT_EQ RSHIFT_EQ AND_NOT_EQ %token FOR BREAK CONTINUE ARROW IF ELSE RANGE @@ -205,6 +205,7 @@ math_expr: | LPAREN { printf("LPAREN\n"); } math_expr RPAREN { printf("RPAREN\n"); } | NUMBER { printf("NUMBER\n"); } | FLOAT_LITERAL { printf("FLOAT LITERAL\n"); } + | COMPLEX_LITERAL { printf("COMPLEX LITERAL\n"); } | IDENTIFIER { printf("IDENTIFIER: %s\n", $1); } | IDENTIFIER INC { printf("POST-INCREMENT: %s++\n", $1); } | IDENTIFIER DEC { printf("POST-DECREMENT: %s--\n", $1); } @@ -271,6 +272,7 @@ type: // literals literal: STRING_LITERAL { } + | COMPLEX_LITERAL { } | BOOL_LITERAL { } | FLOAT_LITERAL { } | NUMBER { } diff --git a/tests/test.txt b/tests/test.txt index 9566e6e..935c417 100644 --- a/tests/test.txt +++ b/tests/test.txt @@ -18,7 +18,7 @@ func test(a int, b string) { func main() { var a int; - a = 2+2*2-(1+10); + a = 2+2*2-(1+10)+213i*2 - 2.123i; a = a + 1; a = a; } \ No newline at end of file