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