добавил секцию списков, сделал множественную короткую декларацию

master2
serr 2025-05-18 17:00:19 +03:00
parent 46d1372143
commit 64cc09d831
3 changed files with 37 additions and 11 deletions

View File

@ -61,6 +61,8 @@ program:
statement: statement:
| var_declaration SEMICOLON | var_declaration SEMICOLON
{ printf("\033[1;33mSTATEMENT: variable declaration\033[0m\n"); } { printf("\033[1;33mSTATEMENT: variable declaration\033[0m\n"); }
| var_multiple_declaration SEMICOLON
{ printf("\033[1;33mSTATEMENT: variable multiple declaration\033[0m\n"); }
| func_declaration | func_declaration
{ printf("\033[1;33mSTATEMENT: function declaration\033[0m\n"); } { printf("\033[1;33mSTATEMENT: function declaration\033[0m\n"); }
| cicle | cicle
@ -71,15 +73,28 @@ statement:
{ printf("\033[1;33mSTATEMENT: label definition '%s'\033[0m\n", $1); } { printf("\033[1;33mSTATEMENT: label definition '%s'\033[0m\n", $1); }
; ;
block:
LBRACE statements_list RBRACE
;
//
// lists
statements_list: statements_list:
| statements_list statement | statements_list statement
| statements_list block | statements_list block
| statements_list expr SEMICOLON | statements_list expr SEMICOLON
; ;
block: identifiers_list:
LBRACE statements_list RBRACE IDENTIFIER { }
; | identifiers_list COMMA IDENTIFIER { }
math_expr_and_literals_list:
literal { }
| math_expr_and_literals_list COMMA literal
| math_expr { }
| math_expr_and_literals_list COMMA math_expr
// //
// condition // condition
@ -104,7 +119,7 @@ cicle:
; ;
post_statement: post_statement:
| IDENTIFIER ASSIGN math_expr { } | identifiers_list ASSIGN math_expr_and_literals_list { }
| IDENTIFIER INC { } | IDENTIFIER INC { }
| IDENTIFIER DEC { } | IDENTIFIER DEC { }
| IDENTIFIER PLUS_EQ math_expr { } | IDENTIFIER PLUS_EQ math_expr { }
@ -124,8 +139,8 @@ loop_block:
; ;
init_loop_statement: init_loop_statement:
| IDENTIFIER SHORT_DECLARATION math_expr | identifiers_list SHORT_DECLARATION math_expr_and_literals_list
| IDENTIFIER ASSIGN math_expr | identifiers_list ASSIGN math_expr_and_literals_list
loop_statements: loop_statements:
| loop_statements statement | loop_statements statement
@ -288,10 +303,11 @@ func_declaration:
// //
// vars decl // vars decl
var_multiple_declaration:
identifiers_list SHORT_DECLARATION math_expr_and_literals_list
var_declaration: var_declaration:
IDENTIFIER SHORT_DECLARATION math_expr { printf("\033[1;33mSHORT DECL with math expr: %s\n\033[0m", $1); } VAR IDENTIFIER type { { printf("\033[1;33mVAR DECL without init value: %s\n\033[0m", $2); } }
| IDENTIFIER SHORT_DECLARATION literal { printf("\033[1;33mSHORT DECL with literal: %s\n\033[0m", $1); }
| VAR IDENTIFIER type { { printf("\033[1;33mVAR DECL without init value: %s\n\033[0m", $2); } }
| VAR IDENTIFIER type ASSIGN math_expr { { printf("\033[1;33mVAR DECL with math expr init value: %s\n\033[0m", $2); } } | VAR IDENTIFIER type ASSIGN math_expr { { printf("\033[1;33mVAR DECL with math expr init value: %s\n\033[0m", $2); } }
| VAR IDENTIFIER type ASSIGN literal { { printf("\033[1;33mVAR DECL with literal init value: %s\n\033[0m", $2); } } | VAR IDENTIFIER type ASSIGN literal { { printf("\033[1;33mVAR DECL with literal init value: %s\n\033[0m", $2); } }
; ;

View File

@ -9,7 +9,8 @@ const (
func main() { func main() {
a, b := 1, 2 for k, l := 0, 10; k < l; k, l = k+1, l-1 {
}
fmt.Println(a, b) fmt.Println(a, b)

View File

@ -1,6 +1,15 @@
package main; package main;
func test() { func test() {
a := 1; // декларация одной переменной a := 1; // декларация одной переменной (число)
a := "test"; // декларация одной переменной (строка)
a, b := 1, 2; // декларация нескольких переменных (целые литералы)
a, b := "hello", "sailor"; // декларация нескольких переменных (строковые литералы)
a, b, c, d := "hello", 2, 3.123, true; // декларация нескольких переменных (всякое)
for k, l := 0, 10; k < l; k, l = k+1, l-1 {
}
} }