добавил возможную экспоненциальную часть к числам
parent
b2de5ce92c
commit
be95ad05e3
|
@ -13,6 +13,7 @@ void yyerror(const char *s) {
|
|||
|
||||
%}
|
||||
|
||||
EXPONENT [eE][+-]?{DIGIT}+
|
||||
DIGIT [0-9]
|
||||
LETTER [a-zA-Z_]
|
||||
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);
|
||||
return COMPLEX_LITERAL;
|
||||
return COMPLEX_LITERAL;
|
||||
}
|
||||
|
||||
{DIGIT}+i { /* Комплексные числа: 123i */
|
||||
{DIGIT}+{EXPONENT}?i {
|
||||
yylval.str = strdup(yytext);
|
||||
return COMPLEX_LITERAL;
|
||||
return COMPLEX_LITERAL;
|
||||
}
|
||||
|
||||
{DIGIT}+\.{DIGIT}+ { /* Обычные float: 123.456 */
|
||||
return FLOAT_LITERAL;
|
||||
{DIGIT}+\.{DIGIT}*{EXPONENT}? {
|
||||
return FLOAT_LITERAL;
|
||||
}
|
||||
|
||||
{DIGIT}+ { /* Целые числа */
|
||||
return NUMBER;
|
||||
{DIGIT}+{EXPONENT} {
|
||||
return FLOAT_LITERAL;
|
||||
}
|
||||
|
||||
{DIGIT}+ {
|
||||
return NUMBER;
|
||||
}
|
||||
|
||||
[ \t\r]+ ; // Пропускаем пробелы и табы
|
||||
|
|
|
@ -191,12 +191,25 @@ continue_statement:
|
|||
expr:
|
||||
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 { }
|
||||
;
|
||||
|
||||
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 MULT math_expr { printf("MULT\n"); }
|
||||
| math_expr DIV math_expr { printf("DIV\n"); }
|
||||
|
|
|
@ -3,7 +3,8 @@ package main
|
|||
import "fmt"
|
||||
|
||||
func main() {
|
||||
|
||||
a := 1e6
|
||||
fmt.Println(a)
|
||||
arr := []int{1, 2, 3}
|
||||
for idx, val := range arr {
|
||||
fmt.Println(idx, val)
|
||||
|
|
|
@ -5,7 +5,24 @@ import (
|
|||
"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() {
|
||||
z -= (z*z*z-x) / (3*z*z);
|
||||
return "123";
|
||||
}
|
||||
|
||||
|
@ -18,7 +35,11 @@ func test(a int, b string) {
|
|||
func main() {
|
||||
|
||||
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;
|
||||
}
|
Loading…
Reference in New Issue