258 lines
6.5 KiB
Plaintext
258 lines
6.5 KiB
Plaintext
%{
|
|
|
|
#include "bison-actions.h"
|
|
|
|
%}
|
|
|
|
// IDs de los tokens generados desde Flex:
|
|
|
|
%token ADD
|
|
%token SUB
|
|
%token MUL
|
|
%token DIV
|
|
%token POW
|
|
%token FUNCTION
|
|
%token IF
|
|
%token ELSE
|
|
%token FOR
|
|
%token WHILE
|
|
%token PRINT
|
|
%token SEMICOLON
|
|
%token COMPOSITE
|
|
%token SQUOTE
|
|
%token DERIVATIVE
|
|
%token INTEGRATE
|
|
%token BETWEEN
|
|
%token AND_INT
|
|
%token EVALUATE
|
|
%token IN
|
|
%token OPEN_BRACES
|
|
%token OPEN_BRACKETS
|
|
%token CLOSE_BRACES
|
|
%token CLOSE_BRACKETS
|
|
%token OPEN_PARENTHESIS
|
|
%token CLOSE_PARENTHESIS
|
|
%token ASSIGN
|
|
%token EQUAL
|
|
%token AND
|
|
%token OR
|
|
%token NOT
|
|
%token ADD_ASSIGN
|
|
%token INCREMENT
|
|
%token SUB_ASSIGN
|
|
%token DECREMENT
|
|
%token MUL_ASSIGN
|
|
%token DIV_ASSIGN
|
|
%token DQUOTE
|
|
%token COMMA
|
|
%token COLON
|
|
%token LESSER
|
|
%token LESSER_EQUAL
|
|
%token GREATER
|
|
%token GREATER_EQUAL
|
|
%token NOT_EQUAL
|
|
%token VAR
|
|
%token ERR
|
|
%token TAYLOR
|
|
%token ESCAPESTRING
|
|
%token PRINTCSV
|
|
%token DOUBLE
|
|
%token INTEGER
|
|
%token STRING
|
|
|
|
// Reglas de asociatividad y precedencia (de menor a mayor):
|
|
|
|
%precedence CLOSE_PARENTHESIS
|
|
%precedence ELSE
|
|
|
|
%left GREATER GREATER_EQUAL LESSER LESSER_EQUAL EQUAL NOT_EQUAL
|
|
%left ADD SUB NOT
|
|
%left MUL DIV AND OR
|
|
%left POW
|
|
|
|
%%
|
|
|
|
program: statements { $$ = ProgramGrammarAction($1); }
|
|
;
|
|
|
|
statement: evaluate SEMICOLON
|
|
| integrate SEMICOLON
|
|
| derivative SEMICOLON
|
|
| declare_function SEMICOLON
|
|
| if_statement
|
|
| ifelse_statement
|
|
| for_statement
|
|
| while_statement
|
|
| printCSV SEMICOLON
|
|
| print SEMICOLON
|
|
| declare_variable SEMICOLON
|
|
| assign_variable SEMICOLON
|
|
;
|
|
|
|
expression: positive_constant
|
|
| evaluate
|
|
| integrate
|
|
| derivative
|
|
| STRING
|
|
| expression ADD expression
|
|
| expression SUB expression
|
|
| expression MUL expression
|
|
| expression DIV expression
|
|
| expression POW expression
|
|
| OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| SUB expression
|
|
;
|
|
|
|
domain: expression LESSER expression
|
|
| expression LESSER_EQUAL expression
|
|
| expression GREATER expression
|
|
| expression GREATER_EQUAL expression
|
|
| expression EQUAL expression
|
|
| expression NOT_EQUAL expression
|
|
| expression LESSER expression LESSER expression
|
|
| expression LESSER_EQUAL expression LESSER expression
|
|
| expression LESSER expression LESSER_EQUAL expression
|
|
| expression LESSER_EQUAL expression LESSER_EQUAL expression
|
|
;
|
|
|
|
boolean: expression LESSER expression
|
|
| expression LESSER_EQUAL expression
|
|
| expression GREATER expression
|
|
| expression GREATER_EQUAL expression
|
|
| expression EQUAL expression
|
|
| expression NOT_EQUAL expression
|
|
| boolean OR boolean
|
|
| boolean AND boolean
|
|
| OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS
|
|
| NOT boolean
|
|
;
|
|
|
|
positive_constant: DOUBLE
|
|
| INTEGER
|
|
;
|
|
|
|
declare_function: FUNCTION STRING ASSIGN function
|
|
| FUNCTION STRING ASSIGN OPEN_BRACES functions CLOSE_BRACES
|
|
;
|
|
|
|
function: expression
|
|
| expression COLON domain
|
|
| composite
|
|
| taylor
|
|
;
|
|
|
|
functions: function
|
|
| function COMMA functions
|
|
;
|
|
|
|
composite: STRING COMPOSITE STRING
|
|
| composite COMPOSITE STRING
|
|
;
|
|
|
|
expressions: expression
|
|
| expression COMMA expressions
|
|
;
|
|
|
|
strings: STRING
|
|
| STRING COMMA strings
|
|
;
|
|
|
|
numArray: OPEN_BRACKETS expressions CLOSE_BRACKETS
|
|
;
|
|
|
|
numArrays: numArray
|
|
| numArray COMMA numArrays
|
|
;
|
|
|
|
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 OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| EVALUATE STRING IN numArray
|
|
| STRING OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| EVALUATE stringArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| EVALUATE stringArray IN numArray
|
|
| stringArray OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
;
|
|
|
|
integrate: INTEGRATE STRING BETWEEN OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS
|
|
| INTEGRATE STRING OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS
|
|
| INTEGRATE stringArray BETWEEN OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS
|
|
| INTEGRATE stringArray OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS
|
|
| integrate ERR positive_constant
|
|
;
|
|
|
|
squotes: SQUOTE
|
|
| SQUOTE squotes
|
|
;
|
|
|
|
print: PRINT OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| PRINT OPEN_PARENTHESIS escapeString CLOSE_PARENTHESIS
|
|
;
|
|
|
|
statements: statement
|
|
| statement statements
|
|
;
|
|
|
|
derivative: DERIVATIVE STRING IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| DERIVATIVE INTEGER STRING IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| STRING squotes OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| DERIVATIVE stringArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| DERIVATIVE INTEGER stringArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| stringArray squotes OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
|
|
| derivative ERR positive_constant
|
|
;
|
|
|
|
if_statement: IF OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS statement
|
|
| IF OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS OPEN_BRACKETS statements CLOSE_BRACKETS
|
|
;
|
|
|
|
ifelse_statement: if_statement ELSE statement
|
|
| if_statement ELSE OPEN_BRACKETS statements CLOSE_BRACKETS
|
|
;
|
|
|
|
for_statement: FOR OPEN_PARENTHESIS declare_variable SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS OPEN_BRACES statements CLOSE_BRACES
|
|
| FOR OPEN_PARENTHESIS SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS OPEN_BRACES statements CLOSE_BRACES
|
|
| FOR OPEN_PARENTHESIS declare_variable SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS statement
|
|
| FOR OPEN_PARENTHESIS SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS statement
|
|
;
|
|
|
|
taylor: TAYLOR INTEGER STRING
|
|
;
|
|
|
|
while_statement: WHILE OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS OPEN_BRACKETS statements CLOSE_BRACKETS
|
|
| WHILE OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS statement
|
|
;
|
|
|
|
declare_variable: VAR STRING
|
|
| declare_variable ASSIGN expression
|
|
;
|
|
|
|
printCSV: PRINTCSV OPEN_PARENTHESIS escapeStringArray COMMA arrayNumArray COMMA escapeString CLOSE_PARENTHESIS
|
|
;
|
|
|
|
assign_variable: STRING ADD_ASSIGN expression
|
|
| STRING SUB_ASSIGN expression
|
|
| STRING MUL_ASSIGN expression
|
|
| STRING DIV_ASSIGN expression
|
|
| STRING INCREMENT
|
|
| STRING DECREMENT
|
|
| STRING ASSIGN expression
|
|
;
|
|
|
|
%%
|