diff --git a/parser/parser.lex b/parser/parser.lex index 685e8a0..42b48b2 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -12,6 +12,7 @@ /* operators */ := return ASSIGN; +::= return DASSIGN; == return DEQUALS; \/ return DIVIDE; = return EQUALS; @@ -41,16 +42,16 @@ \) return RPAREN; /* literals */ --?[0-9]+ { +[0-9]+ { return INT_LITERAL; } --?0x[0-9]+ { +0x[0-9A-Fa-f]+ { return INT_LITERAL; } --?0b[01]+ { +0b[01]+ { return INT_LITERAL; } --?[0-9]*\.[0-9]+([eE][0-9]+)? { +[0-9]*\.[0-9]+([eE]-?[0-9]+)? { return REAL_LITERAL; } @@ -59,6 +60,8 @@ byte return BYTE; ubyte return UBYTE; char return CHAR; wchar return WCHAR; +short return SHORT; +ushort return USHORT; int return INT; uint return UINT; long return LONG; diff --git a/parser/parser.yy b/parser/parser.yy index 55ec6d7..6d73a5b 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -27,6 +27,7 @@ int yywrap() /* operators */ %token ASSIGN; +%token DASSIGN; %token DEQUALS; %token DIVIDE; %token EQUALS; @@ -64,6 +65,8 @@ int yywrap() %token UBYTE; %token CHAR; %token WCHAR; +%token SHORT; +%token USHORT; %token INT; %token UINT; %token LONG; @@ -114,7 +117,7 @@ import_name_more_more: IDENTIFIER import_name_more | STAR ; -function: type IDENTIFIER LPAREN parameter_list RPAREN LCURLY function_items RCURLY +function: IDENTIFIER LPAREN parameter_list RPAREN COLON type LCURLY function_items RCURLY ; function_items: /* empty */ @@ -133,6 +136,8 @@ primitive_type: BYTE | UBYTE | CHAR | WCHAR + | SHORT + | USHORT | INT | UINT | LONG @@ -152,7 +157,7 @@ struct_item: variable_declaration variable_declaration: variable_spec SEMICOLON; ; -variable_spec: type IDENTIFIER +variable_spec: IDENTIFIER COLON type ; ptr_type: type STAR @@ -179,6 +184,7 @@ expression: assign_expr ; assign_expr: lvalue ASSIGN expression + | lvalue DASSIGN expression ; lvalue: IDENTIFIER