добавил декларацию интерфейсов

master2
serr 2025-05-20 23:42:26 +03:00
parent faf37642dc
commit 75058ca1e4
5 changed files with 29 additions and 8 deletions

View File

@ -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; }

View File

@ -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:

View File

@ -0,0 +1,6 @@
package main;
type test interface{
a(a int) (a, b int);
b() (a, b int, string);
};

View File

@ -2,7 +2,7 @@ package main;
// Circle - структура, представляющая круг
type Circle struct {
Radius float64
Radius float64;
};
// Реализация методов интерфейса Geometry для Circle

View File

@ -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;
};