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]
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]+ ; // Пропускаем пробелы и табы

View File

@ -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 { }

View File

@ -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;
}