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