добавил декларацию интерфейсов
parent
faf37642dc
commit
75058ca1e4
|
@ -73,6 +73,7 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
|||
"++" { return INC; }
|
||||
"--" { return DEC; }
|
||||
|
||||
"interface" { return INTERFACE; }
|
||||
"map" { return MAP; }
|
||||
"struct" { return STRUCT; }
|
||||
"type" { return TYPE; }
|
||||
|
|
|
@ -25,7 +25,7 @@ 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
|
||||
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE DEFER GO TYPE STRUCT MAP CHAN INTERFACE
|
||||
%token CHAN CONST CASE SWITCH MAKE
|
||||
%token PLUS MINUS MULT DIV MOD
|
||||
%token STRING
|
||||
|
@ -271,6 +271,9 @@ log_expr:
|
|||
|
||||
// types
|
||||
|
||||
interface_types:
|
||||
INTERFACE {printf("INTERFACE\n"); } LBRACE interface_declarate_field_list RBRACE
|
||||
|
||||
struct_types:
|
||||
STRUCT LBRACE declarate_field_list RBRACE
|
||||
;
|
||||
|
@ -314,6 +317,7 @@ type:
|
|||
| map_types
|
||||
| slice_types
|
||||
| arr_types { }
|
||||
| interface_types
|
||||
| struct_types { }
|
||||
| func_types { }
|
||||
| string_types { }
|
||||
|
@ -462,12 +466,22 @@ map_element:
|
|||
IDENTIFIER LBRACK literal RBRACK
|
||||
| IDENTIFIER LBRACK any_identifier RBRACK
|
||||
|
||||
// interface
|
||||
|
||||
interface_field:
|
||||
IDENTIFIER LPAREN arg_list RPAREN {printf("ret type interface\n");} return_type
|
||||
|
||||
interface_declarate_field_list:
|
||||
| interface_field SEMICOLON
|
||||
| interface_declarate_field_list interface_field SEMICOLON
|
||||
;
|
||||
|
||||
// struct
|
||||
declarate_field_list:
|
||||
| arg_declaration
|
||||
| IDENTIFIER
|
||||
| declarate_field_list SEMICOLON arg_declaration
|
||||
| declarate_field_list SEMICOLON IDENTIFIER
|
||||
| arg_declaration SEMICOLON
|
||||
| IDENTIFIER SEMICOLON
|
||||
| declarate_field_list arg_declaration SEMICOLON
|
||||
| declarate_field_list IDENTIFIER SEMICOLON
|
||||
;
|
||||
|
||||
field:
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package main;
|
||||
|
||||
type test interface{
|
||||
a(a int) (a, b int);
|
||||
b() (a, b int, string);
|
||||
};
|
|
@ -2,7 +2,7 @@ package main;
|
|||
|
||||
// Circle - структура, представляющая круг
|
||||
type Circle struct {
|
||||
Radius float64
|
||||
Radius float64;
|
||||
};
|
||||
|
||||
// Реализация методов интерфейса Geometry для Circle
|
||||
|
|
|
@ -15,12 +15,12 @@ type empty struct{
|
|||
|
||||
type person struct{
|
||||
name string;
|
||||
age int
|
||||
age int;
|
||||
};
|
||||
type person2 struct{
|
||||
name,second_name string;
|
||||
age int;
|
||||
person
|
||||
person;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue