добавил секцию списков, сделал множественную короткую декларацию
parent
46d1372143
commit
64cc09d831
|
@ -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); } }
|
||||||
;
|
;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue