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 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;
taylor 5 f;
fun g = taylor 5 f;

View File

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

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,
TAYLOR,
ESCAPESTRING,
PRINTCSV,
DOUBLE,
INTEGER,
STRING

View File

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

View File

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