добавил указатели
parent
b6765464e1
commit
8b00453427
|
@ -110,6 +110,7 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
||||||
";" { return SEMICOLON; }
|
";" { return SEMICOLON; }
|
||||||
"..." { return DOTS; }
|
"..." { return DOTS; }
|
||||||
":" { return COLON; }
|
":" { return COLON; }
|
||||||
|
"&" { return AMPERSAND; }
|
||||||
|
|
||||||
"//" {
|
"//" {
|
||||||
int c;
|
int c;
|
||||||
|
|
|
@ -25,9 +25,9 @@ void free_node(char *str) {
|
||||||
%token VAR FUNC RETURN STRING_LITERAL FLOAT_LITERAL COMPLEX_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 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 AMPERSAND_EQ PIPE_EQ XOR_EQ LSHIFT_EQ RSHIFT_EQ AND_NOT_EQ
|
||||||
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE DEFER GO TYPE STRUCT MAP CHAN INTERFACE INTERFACE_LITERAL
|
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE DEFER GO TYPE STRUCT MAP INTERFACE INTERFACE_LITERAL
|
||||||
%token CHAN CONST CASE SWITCH MAKE
|
%token CHAN CONST CASE SWITCH MAKE
|
||||||
%token PLUS MINUS MULT DIV MOD
|
%token PLUS MINUS MULT DIV MOD AMPERSAND
|
||||||
%token STRING
|
%token STRING
|
||||||
%token UINT UINT8 UINT16 UINT32 UINT64 UINT_PTR
|
%token UINT UINT8 UINT16 UINT32 UINT64 UINT_PTR
|
||||||
%token INT INT8 INT16 INT32 INT64
|
%token INT INT8 INT16 INT32 INT64
|
||||||
|
@ -48,6 +48,7 @@ void free_node(char *str) {
|
||||||
%right NOT
|
%right NOT
|
||||||
%nonassoc EQ NEQ LT GT LEQ GEQ
|
%nonassoc EQ NEQ LT GT LEQ GEQ
|
||||||
%left UMINUS
|
%left UMINUS
|
||||||
|
%right POINTER_TYPE
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
@ -93,6 +94,7 @@ block:
|
||||||
any_identifier:
|
any_identifier:
|
||||||
IDENTIFIER
|
IDENTIFIER
|
||||||
| WITH_DOT_IDENTIFIER
|
| WITH_DOT_IDENTIFIER
|
||||||
|
| MULT any_identifier %prec POINTER_TYPE { printf("DEREFERENCED IDENTIFIER\n"); }
|
||||||
| arr_element
|
| arr_element
|
||||||
| map_element
|
| map_element
|
||||||
//
|
//
|
||||||
|
@ -241,6 +243,8 @@ math_expr:
|
||||||
| math_expr MULT math_expr { printf("MULT\n"); }
|
| math_expr MULT math_expr { printf("MULT\n"); }
|
||||||
| math_expr DIV math_expr { printf("DIV\n"); }
|
| math_expr DIV math_expr { printf("DIV\n"); }
|
||||||
| math_expr MOD math_expr { printf("MOD\n"); }
|
| math_expr MOD math_expr { printf("MOD\n"); }
|
||||||
|
| MULT math_expr %prec POINTER_TYPE { printf("DEREFERENCE\n"); }
|
||||||
|
| AMPERSAND math_expr %prec UMINUS { printf("ADDRESS OF\n"); }
|
||||||
| MINUS math_expr %prec UMINUS { printf("UMINUS\n"); }
|
| MINUS math_expr %prec UMINUS { printf("UMINUS\n"); }
|
||||||
| LPAREN { printf("LPAREN\n"); } math_expr RPAREN { printf("RPAREN\n"); }
|
| LPAREN { printf("LPAREN\n"); } math_expr RPAREN { printf("RPAREN\n"); }
|
||||||
| NUMBER { printf("NUMBER\n"); }
|
| NUMBER { printf("NUMBER\n"); }
|
||||||
|
@ -315,6 +319,7 @@ type:
|
||||||
|
|
||||||
int_types { }
|
int_types { }
|
||||||
| IDENTIFIER
|
| IDENTIFIER
|
||||||
|
| MULT type %prec POINTER_TYPE { printf("POINTER TYPE\n"); }
|
||||||
| chan_types
|
| chan_types
|
||||||
| map_types
|
| map_types
|
||||||
| slice_types
|
| slice_types
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package main;
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var x *int;
|
||||||
|
y := &x;
|
||||||
|
*x = 10;
|
||||||
|
z := 5 * 10;
|
||||||
|
|
||||||
|
var pf *float64;
|
||||||
|
if pf != nil {
|
||||||
|
fmt.Println("Value:", *pf);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue