доработал return, теперь может быть пустым или возвращать список, добавил условия с присвоением и проверкой
parent
d06d314b12
commit
62f411eb2c
|
@ -70,6 +70,7 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
|||
"++" { return INC; }
|
||||
"--" { return DEC; }
|
||||
|
||||
"range" { return RANGE; }
|
||||
"for" { return FOR; }
|
||||
"break" { return BREAK; }
|
||||
"switch" { return SWITCH; }
|
||||
|
|
|
@ -25,7 +25,7 @@ void free_node(char *str) {
|
|||
%token VAR FUNC RETURN STRING_LITERAL FLOAT_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
|
||||
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE
|
||||
%token CHAN CONST CASE SWITCH
|
||||
%token PLUS MINUS MULT DIV MOD
|
||||
%token STRING
|
||||
|
@ -78,7 +78,6 @@ block:
|
|||
LBRACE statements_list RBRACE
|
||||
;
|
||||
|
||||
|
||||
any_identifier:
|
||||
IDENTIFIER
|
||||
| WITH_DOT_IDENTIFIER
|
||||
|
@ -111,7 +110,8 @@ math_expr_or_literals_list_or_empty:
|
|||
|
||||
// condition
|
||||
condition:
|
||||
IF log_expr block else_part
|
||||
IF var_multiple_short_declaration SEMICOLON log_expr block else_part
|
||||
| IF log_expr block else_part
|
||||
|
||||
else_part:
|
||||
{ printf("\033[1;33mSTATEMENT: if condition with block\033[0m\n"); }
|
||||
|
@ -128,6 +128,8 @@ cicle:
|
|||
{ printf("\033[1;34mLOOP: full for loop with init, condition and post\033[0m\n"); }
|
||||
| FOR log_expr loop_block
|
||||
{ printf("\033[1;34mLOOP: for loop with condition only\033[0m\n"); }
|
||||
| FOR identifiers_list SHORT_DECLARATION RANGE IDENTIFIER loop_block
|
||||
{ printf("\033[1;34mLOOP: range for loop\033[0m\n"); }
|
||||
;
|
||||
|
||||
post_statement:
|
||||
|
@ -187,7 +189,7 @@ continue_statement:
|
|||
|
||||
// expressions
|
||||
expr:
|
||||
RETURN math_expr { printf("\033[1;35mRETURN math expr\033[0m\n") }
|
||||
RETURN math_expr_or_literals_list_or_empty { printf("\033[1;35mRETURN math expr\033[0m\n") }
|
||||
| RETURN literal { printf("\033[1;35mRETURN literal\033[0m\n") }
|
||||
| IDENTIFIER ASSIGN math_expr { }
|
||||
| math_expr { }
|
||||
|
@ -221,6 +223,7 @@ log_expr:
|
|||
| math_expr GEQ math_expr { }
|
||||
| LPAREN log_expr RPAREN { }
|
||||
| BOOL_LITERAL
|
||||
| func_call
|
||||
;
|
||||
//
|
||||
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
package main
|
||||
|
||||
func test(a int) int {
|
||||
return a
|
||||
}
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
panic(test(test(1)*2 + 1))
|
||||
|
||||
arr := []int{1, 2, 3}
|
||||
for idx, val := range arr {
|
||||
fmt.Println(idx, val)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
|
@ -66,4 +66,6 @@ outer2:
|
|||
for key, value := range m {
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
|
@ -11,4 +11,9 @@ func test(a int) int {
|
|||
func main() {
|
||||
a := test(1); // вызов функции обычной
|
||||
fmt.Println(test(test(1)*2+3 - a)); // вызов функции из fmt
|
||||
|
||||
return;
|
||||
|
||||
return 1,2,3,a,"123",1.232, test(1)*2;
|
||||
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ func main() {
|
|||
}
|
||||
|
||||
func isValid() bool {
|
||||
return true
|
||||
return true;
|
||||
}
|
||||
|
||||
func shouldReturn() bool {
|
||||
|
|
Loading…
Reference in New Issue