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

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

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

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 - структура, представляющая круг // Circle - структура, представляющая круг
type Circle struct { type Circle struct {
Radius float64 Radius float64;
}; };
// Реализация методов интерфейса Geometry для Circle // Реализация методов интерфейса Geometry для Circle

View File

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