добавил возможную экспоненциальную часть к числам
parent
b2de5ce92c
commit
be95ad05e3
|
@ -13,6 +13,7 @@ void yyerror(const char *s) {
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
EXPONENT [eE][+-]?{DIGIT}+
|
||||||
DIGIT [0-9]
|
DIGIT [0-9]
|
||||||
LETTER [a-zA-Z_]
|
LETTER [a-zA-Z_]
|
||||||
LETTER_OR_DIGIT [a-zA-Z0-9_]
|
LETTER_OR_DIGIT [a-zA-Z0-9_]
|
||||||
|
@ -129,22 +130,26 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{DIGIT}+\.{DIGIT}*i { /* Комплексные числа: 123.456i */
|
{DIGIT}+\.{DIGIT}*{EXPONENT}?i {
|
||||||
yylval.str = strdup(yytext);
|
yylval.str = strdup(yytext);
|
||||||
return COMPLEX_LITERAL;
|
return COMPLEX_LITERAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
{DIGIT}+i { /* Комплексные числа: 123i */
|
{DIGIT}+{EXPONENT}?i {
|
||||||
yylval.str = strdup(yytext);
|
yylval.str = strdup(yytext);
|
||||||
return COMPLEX_LITERAL;
|
return COMPLEX_LITERAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
{DIGIT}+\.{DIGIT}+ { /* Обычные float: 123.456 */
|
{DIGIT}+\.{DIGIT}*{EXPONENT}? {
|
||||||
return FLOAT_LITERAL;
|
return FLOAT_LITERAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
{DIGIT}+ { /* Целые числа */
|
{DIGIT}+{EXPONENT} {
|
||||||
return NUMBER;
|
return FLOAT_LITERAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
{DIGIT}+ {
|
||||||
|
return NUMBER;
|
||||||
}
|
}
|
||||||
|
|
||||||
[ \t\r]+ ; // Пропускаем пробелы и табы
|
[ \t\r]+ ; // Пропускаем пробелы и табы
|
||||||
|
|
|
@ -191,12 +191,25 @@ continue_statement:
|
||||||
expr:
|
expr:
|
||||||
RETURN math_expr_or_literals_list_or_empty { 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") }
|
| RETURN literal { printf("\033[1;35mRETURN literal\033[0m\n") }
|
||||||
| IDENTIFIER ASSIGN math_expr { }
|
|
||||||
| math_expr { }
|
| math_expr { }
|
||||||
;
|
;
|
||||||
|
|
||||||
math_expr:
|
math_expr:
|
||||||
math_expr PLUS math_expr { printf("PLUS\n"); }
|
IDENTIFIER ASSIGN math_expr { }
|
||||||
|
| IDENTIFIER PLUS_EQ math_expr
|
||||||
|
| IDENTIFIER MINUS_EQ math_expr
|
||||||
|
| IDENTIFIER MUL_EQ math_expr
|
||||||
|
| IDENTIFIER DIV_EQ math_expr
|
||||||
|
|
||||||
|
| IDENTIFIER MOD_EQ math_expr
|
||||||
|
| IDENTIFIER AMPERSAND_EQ math_expr
|
||||||
|
| IDENTIFIER PIPE_EQ math_expr
|
||||||
|
| IDENTIFIER XOR_EQ math_expr
|
||||||
|
| IDENTIFIER LSHIFT_EQ math_expr
|
||||||
|
| IDENTIFIER RSHIFT_EQ math_expr
|
||||||
|
| IDENTIFIER AND_NOT_EQ math_expr
|
||||||
|
|
||||||
|
| math_expr PLUS math_expr { printf("PLUS\n"); }
|
||||||
| math_expr MINUS math_expr { printf("MINUS\n"); }
|
| math_expr MINUS math_expr { printf("MINUS\n"); }
|
||||||
| math_expr MULT math_expr { printf("MULT\n"); }
|
| math_expr MULT math_expr { printf("MULT\n"); }
|
||||||
| math_expr DIV math_expr { printf("DIV\n"); }
|
| math_expr DIV math_expr { printf("DIV\n"); }
|
||||||
|
|
|
@ -3,7 +3,8 @@ package main
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
a := 1e6
|
||||||
|
fmt.Println(a)
|
||||||
arr := []int{1, 2, 3}
|
arr := []int{1, 2, 3}
|
||||||
for idx, val := range arr {
|
for idx, val := range arr {
|
||||||
fmt.Println(idx, val)
|
fmt.Println(idx, val)
|
||||||
|
|
|
@ -5,7 +5,24 @@ import (
|
||||||
"log";
|
"log";
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// A toy implementation of cube root using Newton's method.
|
||||||
|
func CubeRoot(x float64) float64 {
|
||||||
|
z := x/3; // Arbitrary initial value
|
||||||
|
for i := 0; i < 1e6; i++ {
|
||||||
|
prevz := z;
|
||||||
|
z -= (z*z*z-x) / (3*z*z);
|
||||||
|
if veryClose(z, prevz) {
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// A million iterations has not converged; something is wrong.
|
||||||
|
panic(fmt.Sprintf("CubeRoot(%g) did not converge", x));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func test() {
|
func test() {
|
||||||
|
z -= (z*z*z-x) / (3*z*z);
|
||||||
return "123";
|
return "123";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +35,11 @@ func test(a int, b string) {
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
var a int;
|
var a int;
|
||||||
a = 2+2*2-(1+10)+213i*2 - 2.123i;
|
var c complex128 = 555.12i+1.123i;
|
||||||
|
|
||||||
|
a := 123+123e45 + 123.456 +123.456e-78+123i+123.456e10i;
|
||||||
|
|
||||||
|
a = 2+2*2-(1+10)+213i*2 - 2.123i - c;
|
||||||
a = a + 1;
|
a = a + 1;
|
||||||
a = a;
|
a = a;
|
||||||
}
|
}
|
Loading…
Reference in New Issue