Fix LOTS of warnings (shift/reduce and reduce/reduce)

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 19:11:42 -03:00
parent 01d08db37b
commit 72b7fcf0ff
11 changed files with 95 additions and 97 deletions

View File

@ -5,8 +5,8 @@ function g = { x - 2: x < 3,
};
fun h = x/(x-2);
evaluate f in 3;
evaluate f in (3);
g(5);
evaluate g in 4;
evaluate g in (4);
g(2);
h(2);

View File

@ -1,2 +1,2 @@
fun f = 1/x;
derivative f in 3 err -2;
derivative f in (3) err -2;

View File

@ -1,6 +1,6 @@
fun f = x^2;
derivative f in 3;
derivative 2 f in 3;
derivative 3 f in 3;
derivative 4 f in 3;
derivative 5 f in 3;
derivative f in (3);
derivative 2 f in (3);
derivative 3 f in (3);
derivative 4 f in (3);
derivative 5 f in (3);

View File

@ -2,4 +2,4 @@ fun f = - x^2 / 2 + 5*x;
fun g = x^2 - 5*x - 2;
fun h = x^2 - 5*x - 82;
integrate [f, g, h] between 2 ~ 7;
integrate [f, g, h] between (2 ~ 7);

View File

@ -1 +1,2 @@
fun f = f(3) * x * 4 + 3;
fun f = f(3) * x * 4 + 3;
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;

View File

@ -1,4 +1,4 @@
fun f = x^2;
var a = int f 0 ~ 5;
var b = int f 0 ~ 1 + int f 1 ~ 2 + int f 2 ~ 3 + int f 3 ~ 4 + int f 4 ~ 5;
var a = int f (0 ~ 5);
var b = int f (0 ~ 1) + int f (1 ~ 2) + int f (2 ~ 3) + int f (3 ~ 4) + int f (4 ~ 5);
var c = a - b;

View File

@ -62,7 +62,7 @@ typedef enum TokenID {
LESSER_EQUAL,
GREATER,
GREATER_EQUAL,
COMPARE,
NOT_EQUAL,
VAR,
ERR,
TAYLOR,

View File

@ -20,7 +20,6 @@ char [a-zA-Z]
characters [a-zA-Z., ]
decimal [.]
endline \n
/* whitespace [\f\n\r\t\v\0 ] */
whitespace [ \f\n\r\t\v]
%%
@ -54,6 +53,7 @@ whitespace [ \f\n\r\t\v]
"<=" { return LESSER_EQUAL; }
">" { return GREATER; }
">=" { return GREATER_EQUAL; }
"!=" { return NOT_EQUAL; }
"in" { return IN; }
"{" { return OPEN_BRACES; }
"}" { return CLOSE_BRACES; }

View File

@ -10,13 +10,13 @@
void yyerror(const char * string) {
LogError("Mensaje: '%s' debido a '%s' (linea %d).", string, yytext, yylineno);
LogError("En ASCII es:");
LogErrorRaw("\t");
const int length = strlen(yytext);
for (int i = 0; i < length; ++i) {
LogErrorRaw("[%d]", yytext[i]);
}
LogErrorRaw("\n\n");
// LogError("En ASCII es:");
// LogErrorRaw("\t");
// const int length = strlen(yytext);
// for (int i = 0; i < length; ++i) {
// LogErrorRaw("[%d]", yytext[i]);
// }
// LogErrorRaw("\n\n");
}
int ProgramGrammarAction(const int value) {

View File

@ -50,7 +50,7 @@
%token LESSER_EQUAL
%token GREATER
%token GREATER_EQUAL
%token COMPARE
%token NOT_EQUAL
%token VAR
%token ERR
%token TAYLOR
@ -61,8 +61,9 @@
%token STRING
// Reglas de asociatividad y precedencia (de menor a mayor):
%left ADD SUB
%left MUL DIV
%left GREATER GREATER_EQUAL LESSER LESSER_EQUAL EQUAL NOT_EQUAL
%left ADD SUB NOT
%left MUL DIV AND OR
%left POW
%%
@ -70,50 +71,60 @@
program: statements { $$ = ProgramGrammarAction($1); }
;
expression: constant
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 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
| 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
| number LESSER_EQUAL STRING LESSER_EQUAL number
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: number LESSER number
| number LESSER_EQUAL number
| number GREATER number
| number GREATER_EQUAL number
| number EQUAL number
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
;
constant: DOUBLE
positive_constant: DOUBLE
| INTEGER
| SUB constant
;
declare_function: FUNCTION STRING ASSIGN function
@ -134,15 +145,15 @@ composite: STRING COMPOSITE STRING
| composite COMPOSITE STRING
;
numbers: number
| number COMMA numbers
expressions: expression
| expression COMMA expressions
;
strings: STRING
| STRING COMMA strings
;
numArray: OPEN_BRACKETS numbers CLOSE_BRACKETS
numArray: OPEN_BRACKETS expressions CLOSE_BRACKETS
;
numArrays: numArray
@ -166,41 +177,26 @@ escapeStrings: escapeString
escapeStringArray: OPEN_BRACKETS escapeStrings CLOSE_BRACKETS
;
evaluate: EVALUATE STRING IN number
evaluate: EVALUATE STRING IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
| EVALUATE STRING IN numArray
| STRING OPEN_PARENTHESIS number CLOSE_PARENTHESIS
| EVALUATE stringArray IN number
| STRING OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
| EVALUATE stringArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
| EVALUATE stringArray IN numArray
| stringArray OPEN_PARENTHESIS number CLOSE_PARENTHESIS
| stringArray OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
;
integrate: INTEGRATE STRING BETWEEN number AND_INT number
| INTEGRATE STRING number AND_INT number
| INTEGRATE stringArray BETWEEN number AND_INT number
| INTEGRATE stringArray number AND_INT number
| integrate ERR constant
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
;
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
;
print: PRINT OPEN_PARENTHESIS number CLOSE_PARENTHESIS
| PRINT OPEN_PARENTHESIS STRING CLOSE_PARENTHESIS
print: PRINT OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
| PRINT OPEN_PARENTHESIS escapeString CLOSE_PARENTHESIS
;
@ -208,13 +204,13 @@ statements: statement
| statement statements
;
derivative: DERIVATIVE STRING IN constant
| DERIVATIVE INTEGER STRING IN constant
| STRING squotes OPEN_PARENTHESIS constant CLOSE_PARENTHESIS
| DERIVATIVE stringArray IN constant
| DERIVATIVE INTEGER stringArray IN constant
| stringArray squotes OPEN_PARENTHESIS constant CLOSE_PARENTHESIS
| derivative ERR constant
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 OPEN_BRACKETS statements CLOSE_BRACKETS
@ -245,23 +241,23 @@ declare_variable: VAR STRING
printCSV: PRINTCSV OPEN_PARENTHESIS escapeStringArray COMMA arrayNumArray COMMA escapeString CLOSE_PARENTHESIS
;
number: constant
/* expression: positive_constant
| evaluate
| integrate
| derivative
| number ADD number
| number DIV number
| number SUB number
| number POW number
| number MUL number
| SUB number
| OPEN_PARENTHESIS number CLOSE_PARENTHESIS
;
| expression ADD expression
| expression DIV expression
| expression SUB expression
| expression POW expression
| expression MUL expression
| SUB expression
| OPEN_PARENTHESIS expression CLOSE_PARENTHESIS
; */
assign_variable: STRING ADD_ASSIGN number
| STRING SUB_ASSIGN number
| STRING MUL_ASSIGN number
| STRING DIV_ASSIGN number
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

View File

@ -13,6 +13,7 @@ const int main(const int argumentCount, const char ** arguments) {
// #ifdef YYDEBUG
// yydebug = 1;
// #endif
// Inicializar estado de la aplicación.
state.result = 0;
state.succeed = false;