Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
This commit is contained in:
Santiago Lo Coco 2022-04-18 06:28:25 -03:00
parent 7b905ec260
commit af3d848aec
6 changed files with 64 additions and 39 deletions

View File

@ -1,3 +1,2 @@
fun f = 1/x; fun f = 1/x;
fun g = f(3) + f'(3)*(x-3) + f''(3)/2 * (x-3)^2 + f'''(3) / 6 * (x-3)^3 + f''''(3) / 24 * (x-3)^4; fun g = taylor 5 f;
taylor 5 f;

View File

@ -1,4 +1,5 @@
fun g = (1-x)^(x);
fun f = x^2;
fun h = x/(x-2); fun h = x/(x-2);
fun g = hohohoh; fun j = 1/x;
printCsv g(1) printCSV(["g", "f", "h", "j"], [[g(1), f(1), h(1) , j(1), gofohoj(1)]], "example.csv");
printCsv g(1)

View File

@ -1 +1 @@
var x = f(3) * x * 4 + 3; fun f = f(3) * x * 4 + 3;

View File

@ -67,6 +67,7 @@ typedef enum TokenID {
ERR, ERR,
TAYLOR, TAYLOR,
ESCAPESTRING, ESCAPESTRING,
PRINTCSV,
DOUBLE, DOUBLE,
INTEGER, INTEGER,
STRING STRING

View File

@ -17,6 +17,7 @@
crlf \r\n crlf \r\n
digit [0-9] digit [0-9]
char [a-zA-Z] char [a-zA-Z]
characters [a-zA-Z., ]
decimal [.] decimal [.]
endline \n endline \n
/* whitespace [\f\n\r\t\v\0 ] */ /* whitespace [\f\n\r\t\v\0 ] */
@ -75,6 +76,7 @@ whitespace [ \f\n\r\t\v]
"var" { return VAR; } "var" { return VAR; }
"err" { return ERR; } "err" { return ERR; }
"taylor" { return TAYLOR; } "taylor" { return TAYLOR; }
"printCSV" { return PRINTCSV; }
{digit}+{decimal}{digit}+ { return DoublePatternAction(yytext); } {digit}+{decimal}{digit}+ { return DoublePatternAction(yytext); }
@ -83,7 +85,7 @@ whitespace [ \f\n\r\t\v]
{char}+ { return StringPatternAction(yytext); } {char}+ { return StringPatternAction(yytext); }
\"{char}+\" { return EscapeStringPatternAction(yytext); } \"{characters}+\" { return EscapeStringPatternAction(yytext); }
{whitespace} { IgnoredPatternAction(yytext); } {whitespace} { IgnoredPatternAction(yytext); }

View File

@ -55,6 +55,7 @@
%token ERR %token ERR
%token TAYLOR %token TAYLOR
%token ESCAPESTRING %token ESCAPESTRING
%token PRINTCSV
%token DOUBLE %token DOUBLE
%token INTEGER %token INTEGER
%token STRING %token STRING
@ -66,31 +67,34 @@
%% %%
program: statements // { $$ = ProgramGrammarAction($1); } program: statements
; ;
expression: constant expression: constant
| evaluate
| integrate
| derivative
| STRING | STRING
| expression ADD expression // { $$ = AdditionExpressionGrammarAction($1, $3); } | expression ADD expression
| expression SUB expression // { $$ = SubtractionExpressionGrammarAction($1, $3); } | expression SUB expression
| expression MUL expression // { $$ = MultiplicationExpressionGrammarAction($1, $3); } | expression MUL expression
| expression DIV expression // { $$ = DivisionExpressionGrammarAction($1, $3); } | expression DIV expression
| expression POW expression // { $$ = PowerExpressionGrammarAction($1, $3); } | expression POW expression
| OPEN_PARENTHESIS expression CLOSE_PARENTHESIS | OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
| SUB expression | SUB expression
| number | number
; ;
domain: STRING LESSER number // { $$ = LesserExpressionGrammarAction($1, $3); } domain: STRING LESSER number
| STRING LESSER_EQUAL number // { $$ = LesserEqualExpressionGrammarAction($1, $3); } | STRING LESSER_EQUAL number
| STRING GREATER number // { $$ = GreaterExpressionGrammarAction($1, $3); } | STRING GREATER number
| STRING GREATER_EQUAL number // { $$ = GreaterEqualExpressionGrammarAction($1, $3); } | STRING GREATER_EQUAL number
| STRING EQUAL number // { $$ = EqualExpressionGrammarAction($1, $3); } | STRING EQUAL number
| number LESSER STRING // { $$ = LesserExpressionGrammarAction($1, $3); } | number LESSER STRING
| number LESSER_EQUAL STRING // { $$ = LesserEqualExpressionGrammarAction($1, $3); } | number LESSER_EQUAL STRING
| number GREATER STRING // { $$ = GreaterExpressionGrammarAction($1, $3); } | number GREATER STRING
| number GREATER_EQUAL STRING // { $$ = GreaterEqualExpressionGrammarAction($1, $3); } | number GREATER_EQUAL STRING
| number EQUAL STRING // { $$ = EqualExpressionGrammarAction($1, $3); } | number EQUAL STRING
| number LESSER STRING LESSER number | number LESSER STRING LESSER number
| number LESSER_EQUAL STRING LESSER number | number LESSER_EQUAL STRING LESSER number
| number LESSER STRING LESSER_EQUAL number | number LESSER STRING LESSER_EQUAL number
@ -136,19 +140,38 @@ numbers: number
strings: STRING strings: STRING
| STRING COMMA strings | STRING COMMA strings
;
numArray: OPEN_BRACKETS numbers CLOSE_BRACKETS numArray: OPEN_BRACKETS numbers CLOSE_BRACKETS
; ;
numArrays: numArray
| numArray COMMA numArrays
;
arrayNumArray: OPEN_BRACKETS numArrays CLOSE_BRACKETS
;
stringArray: OPEN_BRACKETS strings CLOSE_BRACKETS stringArray: OPEN_BRACKETS strings CLOSE_BRACKETS
; ;
evaluate: EVALUATE STRING IN number //{ $$ = IntegerConstantGrammarAction($1); } escapeString: ESCAPESTRING
| EVALUATE STRING IN numArray //{ $$ = IntegerConstantGrammarAction($1); } | ESCAPESTRING ADD escapeString
| STRING OPEN_PARENTHESIS number CLOSE_PARENTHESIS //{ $$ = IntegerConstantGrammarAction($1); } ;
| EVALUATE stringArray IN number //{ $$ = IntegerConstantGrammarAction($1); }
| EVALUATE stringArray IN numArray //{ $$ = IntegerConstantGrammarAction($1); } escapeStrings: escapeString
| stringArray OPEN_PARENTHESIS number CLOSE_PARENTHESIS //{ $$ = IntegerConstantGrammarAction($1); } | escapeString COMMA escapeStrings
;
escapeStringArray: OPEN_BRACKETS escapeStrings CLOSE_BRACKETS
;
evaluate: EVALUATE STRING IN number
| EVALUATE STRING IN numArray
| STRING OPEN_PARENTHESIS number CLOSE_PARENTHESIS
| EVALUATE stringArray IN number
| EVALUATE stringArray IN numArray
| stringArray OPEN_PARENTHESIS number CLOSE_PARENTHESIS
; ;
integrate: INTEGRATE STRING BETWEEN number AND_INT number integrate: INTEGRATE STRING BETWEEN number AND_INT number
@ -170,6 +193,7 @@ statement: evaluate SEMICOLON
| ifelse_statement | ifelse_statement
| for_statement | for_statement
| while_statement | while_statement
| printCSV SEMICOLON
| print SEMICOLON | print SEMICOLON
| declare_variable SEMICOLON | declare_variable SEMICOLON
| assign_variable SEMICOLON | assign_variable SEMICOLON
@ -177,11 +201,7 @@ statement: evaluate SEMICOLON
print: PRINT OPEN_PARENTHESIS number CLOSE_PARENTHESIS print: PRINT OPEN_PARENTHESIS number CLOSE_PARENTHESIS
| PRINT OPEN_PARENTHESIS STRING CLOSE_PARENTHESIS | PRINT OPEN_PARENTHESIS STRING CLOSE_PARENTHESIS
| PRINT OPEN_PARENTHESIS escapedString CLOSE_PARENTHESIS | PRINT OPEN_PARENTHESIS escapeString CLOSE_PARENTHESIS
;
escapedString: ESCAPESTRING
| ESCAPESTRING ADD escapedString
; ;
statements: statement statements: statement
@ -219,14 +239,16 @@ while_statement: WHILE OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS OPEN_BRACKETS
; ;
declare_variable: VAR STRING declare_variable: VAR STRING
| VAR STRING ASSIGN number
| VAR STRING ASSIGN expression | VAR STRING ASSIGN expression
; ;
number: evaluate printCSV: PRINTCSV OPEN_PARENTHESIS escapeStringArray COMMA arrayNumArray COMMA escapeString CLOSE_PARENTHESIS
;
number: constant
| evaluate
| integrate | integrate
| derivative | derivative
| constant
| number ADD number | number ADD number
| number DIV number | number DIV number
| number SUB number | number SUB number