добавил указатели
parent
b6765464e1
commit
8b00453427
|
@ -110,6 +110,7 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
|||
";" { return SEMICOLON; }
|
||||
"..." { return DOTS; }
|
||||
":" { return COLON; }
|
||||
"&" { return AMPERSAND; }
|
||||
|
||||
"//" {
|
||||
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 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 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 PLUS MINUS MULT DIV MOD
|
||||
%token PLUS MINUS MULT DIV MOD AMPERSAND
|
||||
%token STRING
|
||||
%token UINT UINT8 UINT16 UINT32 UINT64 UINT_PTR
|
||||
%token INT INT8 INT16 INT32 INT64
|
||||
|
@ -48,6 +48,7 @@ void free_node(char *str) {
|
|||
%right NOT
|
||||
%nonassoc EQ NEQ LT GT LEQ GEQ
|
||||
%left UMINUS
|
||||
%right POINTER_TYPE
|
||||
|
||||
%%
|
||||
|
||||
|
@ -93,6 +94,7 @@ block:
|
|||
any_identifier:
|
||||
IDENTIFIER
|
||||
| WITH_DOT_IDENTIFIER
|
||||
| MULT any_identifier %prec POINTER_TYPE { printf("DEREFERENCED IDENTIFIER\n"); }
|
||||
| arr_element
|
||||
| map_element
|
||||
//
|
||||
|
@ -241,6 +243,8 @@ math_expr:
|
|||
| math_expr MULT math_expr { printf("MULT\n"); }
|
||||
| math_expr DIV math_expr { printf("DIV\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"); }
|
||||
| LPAREN { printf("LPAREN\n"); } math_expr RPAREN { printf("RPAREN\n"); }
|
||||
| NUMBER { printf("NUMBER\n"); }
|
||||
|
@ -315,6 +319,7 @@ type:
|
|||
|
||||
int_types { }
|
||||
| IDENTIFIER
|
||||
| MULT type %prec POINTER_TYPE { printf("POINTER TYPE\n"); }
|
||||
| chan_types
|
||||
| map_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