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); fun h = x/(x-2);
evaluate f in 3; evaluate f in (3);
g(5); g(5);
evaluate g in 4; evaluate g in (4);
g(2); g(2);
h(2); h(2);

View File

@ -1,2 +1,2 @@
fun f = 1/x; 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; fun f = x^2;
derivative f in 3; derivative f in (3);
derivative 2 f in 3; derivative 2 f in (3);
derivative 3 f in 3; derivative 3 f in (3);
derivative 4 f in 3; derivative 4 f in (3);
derivative 5 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 g = x^2 - 5*x - 2;
fun h = x^2 - 5*x - 82; 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; fun f = x^2;
var a = int f 0 ~ 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 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; var c = a - b;

View File

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

View File

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

View File

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

View File

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

View File

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