добавил FROM_PACKAGE_IDENTIFIER - обращение к чему то в каком то пакете
все что берется из другого пакета выглядит так <имя_пакета.Название>, где Название всегда с большой буквыmaster2
parent
3fbd10ea34
commit
2973ff1f2f
|
@ -13,9 +13,10 @@ void yyerror(const char *s) {
|
|||
|
||||
%}
|
||||
|
||||
DIGIT [0-9]
|
||||
LETTER [a-zA-Z_]
|
||||
LETTER_OR_DIGIT [a-zA-Z0-9_]
|
||||
DIGIT [0-9]
|
||||
BIG_LETTER [A-Z]
|
||||
LETTER [a-zA-Z_]
|
||||
LETTER_OR_DIGIT [a-zA-Z0-9_]
|
||||
|
||||
%%
|
||||
|
||||
|
@ -117,9 +118,13 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
|||
return STRING_LITERAL;
|
||||
}
|
||||
|
||||
{LETTER}{LETTER_OR_DIGIT}* {
|
||||
{LETTER}{LETTER_OR_DIGIT}*(\.{BIG_LETTER}{LETTER_OR_DIGIT}*)? {
|
||||
yylval.str = strdup(yytext);
|
||||
return IDENTIFIER;
|
||||
if (strchr(yytext, '.') != NULL) {
|
||||
return FROM_PACKAGE_IDENTIFIER;
|
||||
} else {
|
||||
return IDENTIFIER;
|
||||
}
|
||||
}
|
||||
|
||||
[0-9]+\.[0-9]+ {
|
||||
|
|
|
@ -34,7 +34,7 @@ void free_node(char *str) {
|
|||
%token RUNE BYTE BOOL_LITERAL
|
||||
%token FLOAT32 FLOAT64
|
||||
%token COMPLEX64 COMPLEX128
|
||||
%token <str> IDENTIFIER
|
||||
%token <str> IDENTIFIER FROM_PACKAGE_IDENTIFIER
|
||||
%token AND OR NOT EQ NEQ LT GT LEQ GEQ
|
||||
|
||||
%left PLUS_EQ MINUS_EQ MUL_EQ DIV_EQ MOD_EQ
|
||||
|
@ -92,14 +92,17 @@ identifiers_list:
|
|||
| identifiers_list COMMA IDENTIFIER { }
|
||||
|
||||
math_expr_or_literals_list:
|
||||
literal { }
|
||||
literal { }
|
||||
| math_expr { }
|
||||
| func_call { }
|
||||
| math_expr_or_literals_list COMMA literal
|
||||
|
||||
| math_expr { }
|
||||
| math_expr_or_literals_list COMMA math_expr
|
||||
| math_expr_or_literals_list COMMA func_call
|
||||
;
|
||||
|
||||
math_expr_or_literals_list_or_empty:
|
||||
| math_expr_or_literals_list
|
||||
|
||||
//
|
||||
|
||||
// condition
|
||||
|
@ -199,6 +202,7 @@ math_expr:
|
|||
| IDENTIFIER { printf("IDENTIFIER: %s\n", $1); }
|
||||
| IDENTIFIER INC { printf("POST-INCREMENT: %s++\n", $1); }
|
||||
| IDENTIFIER DEC { printf("POST-DECREMENT: %s--\n", $1); }
|
||||
| func_call { printf("FUNCTION CALL IN EXPR\n"); }
|
||||
;
|
||||
|
||||
log_expr:
|
||||
|
@ -285,9 +289,9 @@ import_list:
|
|||
//
|
||||
|
||||
// functions
|
||||
|
||||
func_call:
|
||||
IDENTIFIER LPAREN math_expr_or_literals_list_or_empty RPAREN
|
||||
| FROM_PACKAGE_IDENTIFIER LPAREN math_expr_or_literals_list_or_empty RPAREN
|
||||
|
||||
arg_declaration:
|
||||
IDENTIFIER type
|
||||
|
|
|
@ -1,17 +1,9 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
const (
|
||||
a = "123123"
|
||||
b = "123123"
|
||||
)
|
||||
func test(a int) int {
|
||||
return a
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
for k, l := 0, 10; k < l; k, l = k+1, l-1 {
|
||||
}
|
||||
|
||||
fmt.Println(a, b)
|
||||
|
||||
panic(test(test(1)*2 + 1))
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package main;
|
||||
|
||||
import (
|
||||
"fmt";
|
||||
)
|
||||
|
||||
func test(a int) int {
|
||||
return a;
|
||||
}
|
||||
|
||||
func main() {
|
||||
a := test(1); // вызов функции обычной
|
||||
fmt.Println(test(test(1)*2+3 - a)); // вызов функции из fmt
|
||||
}
|
|
@ -1,5 +1,9 @@
|
|||
package main;
|
||||
|
||||
func dva() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
func test() {
|
||||
|
||||
a := 1; // декларация одной переменной (число)
|
||||
|
@ -8,7 +12,7 @@ func test() {
|
|||
a, b := 1, 2; // декларация нескольких переменных (целые литералы)
|
||||
a, b := b, a; // swap
|
||||
a, b := "hello", "sailor"; // декларация нескольких переменных (строковые литералы)
|
||||
a, b, c, d := "hello", 2, 3.123, true; // декларация нескольких переменных (всякое)
|
||||
a, b, c, d, v := "hello", 2, 3.123, true, dva(); // декларация нескольких переменных (всякое)
|
||||
|
||||
// цикл с множественной декларацией и множественным присвоением
|
||||
for k, l := 0, 10; k < l; k, l = k+1, l-1 {
|
||||
|
|
Loading…
Reference in New Issue