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; }
|
||||
"var" { return VAR; }
|
||||
"string" { return STRING; }
|
||||
|
||||
"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 ASSIGN; }
|
||||
"{" { return LBRACE; }
|
||||
"}" { return RBRACE; }
|
||||
";" { return SEMICOLON; }
|
||||
|
||||
[a-zA-Z_][a-zA-Z0-9_]* {
|
||||
\"([^"\\]|\\.)*\" {
|
||||
yylval.str = strdup(yytext);
|
||||
return STRING_LITERAL;
|
||||
}
|
||||
|
||||
{LETTER}{LETTER_OR_DIGIT}* {
|
||||
yylval.str = strdup(yytext);
|
||||
return IDENTIFIER;
|
||||
}
|
||||
[0-9]+ {
|
||||
{DIGIT}+ {
|
||||
yylval.str = strdup(yytext);
|
||||
return NUMBER;
|
||||
}
|
||||
|
|
|
@ -19,12 +19,16 @@ void free_node(char *str) {
|
|||
char *str;
|
||||
}
|
||||
|
||||
%token <str> IDENTIFIER NUMBER TEXT
|
||||
%token SHORT_DECLARATION LBRACE RBRACE SEMICOLON
|
||||
%token INT
|
||||
%token <str> IDENTIFIER NUMBER TEXT STRING_LITERAL
|
||||
%token SHORT_DECLARATION LBRACE RBRACE SEMICOLON ASSIGN
|
||||
%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:
|
||||
IDENTIFIER SHORT_DECLARATION NUMBER {
|
||||
IDENTIFIER SHORT_DECLARATION literal {
|
||||
printf("Short declaration: %s := %s\n", $1, $3);
|
||||
free_node($1);
|
||||
free_node($3);
|
||||
}
|
||||
| VAR IDENTIFIER INT {
|
||||
printf("Variable declaration: var %s int\n", $2);
|
||||
| VAR IDENTIFIER type {
|
||||
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);
|
||||
}
|
||||
;
|
||||
|
|
|
@ -1,9 +1,26 @@
|
|||
a := 1;
|
||||
{
|
||||
|
||||
a := 1;
|
||||
|
||||
s := "test string";
|
||||
|
||||
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;
|
||||
|
||||
|
||||
s := "123";
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue