literals
parent
459da870e9
commit
eb474dcd26
|
@ -13,21 +13,43 @@ void yyerror(const char *s) {
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
DIGIT [0-9]
|
||||||
|
LETTER [a-zA-Z_]
|
||||||
|
LETTER_OR_DIGIT [a-zA-Z0-9_]
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
"int" { return INT; }
|
"string" { return STRING; }
|
||||||
"var" { return VAR; }
|
|
||||||
|
|
||||||
|
"uint" { return UINT; }
|
||||||
|
"uint8" { return UINT8; }
|
||||||
|
"uint16" { return UINT16; }
|
||||||
|
"uint32" { return UINT32; }
|
||||||
|
"uint64" { return UINT64; }
|
||||||
|
|
||||||
|
"int" { return INT; }
|
||||||
|
"int8" { return INT8; }
|
||||||
|
"int16" { return INT16; }
|
||||||
|
"int32" { return INT32; }
|
||||||
|
"int64" { return INT64; }
|
||||||
|
|
||||||
|
"var" { return VAR; }
|
||||||
":=" { return SHORT_DECLARATION; }
|
":=" { return SHORT_DECLARATION; }
|
||||||
|
"=" { return ASSIGN; }
|
||||||
"{" { return LBRACE; }
|
"{" { return LBRACE; }
|
||||||
"}" { return RBRACE; }
|
"}" { return RBRACE; }
|
||||||
";" { return SEMICOLON; }
|
";" { return SEMICOLON; }
|
||||||
|
|
||||||
[a-zA-Z_][a-zA-Z0-9_]* {
|
\"([^"\\]|\\.)*\" {
|
||||||
|
yylval.str = strdup(yytext);
|
||||||
|
return STRING_LITERAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
{LETTER}{LETTER_OR_DIGIT}* {
|
||||||
yylval.str = strdup(yytext);
|
yylval.str = strdup(yytext);
|
||||||
return IDENTIFIER;
|
return IDENTIFIER;
|
||||||
}
|
}
|
||||||
[0-9]+ {
|
{DIGIT}+ {
|
||||||
yylval.str = strdup(yytext);
|
yylval.str = strdup(yytext);
|
||||||
return NUMBER;
|
return NUMBER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,12 +19,16 @@ void free_node(char *str) {
|
||||||
char *str;
|
char *str;
|
||||||
}
|
}
|
||||||
|
|
||||||
%token <str> IDENTIFIER NUMBER TEXT
|
%token <str> IDENTIFIER NUMBER TEXT STRING_LITERAL
|
||||||
%token SHORT_DECLARATION LBRACE RBRACE SEMICOLON
|
%token SHORT_DECLARATION LBRACE RBRACE SEMICOLON ASSIGN
|
||||||
%token INT
|
|
||||||
%token VAR
|
%token VAR
|
||||||
|
|
||||||
%type <str> expr declaration
|
%token STRING
|
||||||
|
%token UINT UINT8 UINT16 UINT32 UINT64
|
||||||
|
%token INT INT8 INT16 INT32 INT64
|
||||||
|
|
||||||
|
|
||||||
|
%type <str> expr declaration literal
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
@ -54,14 +58,50 @@ expr:
|
||||||
// }
|
// }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
// Типы
|
||||||
|
// Группирует все возможные типы
|
||||||
|
int_types:
|
||||||
|
UINT
|
||||||
|
| UINT8
|
||||||
|
| UINT16
|
||||||
|
| UINT32
|
||||||
|
| UINT64
|
||||||
|
| INT
|
||||||
|
| INT8
|
||||||
|
| INT16
|
||||||
|
| INT32
|
||||||
|
| INT64
|
||||||
|
;
|
||||||
|
|
||||||
|
string_types:
|
||||||
|
STRING
|
||||||
|
;
|
||||||
|
|
||||||
|
type:
|
||||||
|
int_types
|
||||||
|
| string_types
|
||||||
|
;
|
||||||
|
//
|
||||||
|
|
||||||
|
// Литералы
|
||||||
|
literal:
|
||||||
|
STRING_LITERAL
|
||||||
|
| NUMBER
|
||||||
|
;
|
||||||
|
//
|
||||||
|
|
||||||
declaration:
|
declaration:
|
||||||
IDENTIFIER SHORT_DECLARATION NUMBER {
|
IDENTIFIER SHORT_DECLARATION literal {
|
||||||
printf("Short declaration: %s := %s\n", $1, $3);
|
printf("Short declaration: %s := %s\n", $1, $3);
|
||||||
free_node($1);
|
free_node($1);
|
||||||
free_node($3);
|
free_node($3);
|
||||||
}
|
}
|
||||||
| VAR IDENTIFIER INT {
|
| VAR IDENTIFIER type {
|
||||||
printf("Variable declaration: var %s int\n", $2);
|
printf("Variable declaration: var %s type\n", $2);
|
||||||
|
free_node($2);
|
||||||
|
}
|
||||||
|
| VAR IDENTIFIER type ASSIGN literal {
|
||||||
|
printf("Var with assign declaration: var %s type = %s\n", $2, $5);
|
||||||
free_node($2);
|
free_node($2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
|
@ -1,9 +1,26 @@
|
||||||
a := 1;
|
a := 1;
|
||||||
{
|
{
|
||||||
|
|
||||||
a := 1;
|
a := 1;
|
||||||
|
|
||||||
|
s := "test string";
|
||||||
|
|
||||||
var a int;
|
var a int;
|
||||||
|
var a int8;
|
||||||
|
var a int16;
|
||||||
|
var a int32;
|
||||||
|
var a int64;
|
||||||
|
var a uint8;
|
||||||
|
var a uint16;
|
||||||
|
var a uint32;
|
||||||
|
var a uint64;
|
||||||
|
|
||||||
|
var a string = "123123";
|
||||||
{
|
{
|
||||||
|
|
||||||
b := 2;
|
b := 2;
|
||||||
|
|
||||||
|
|
||||||
|
s := "123";
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue