oprava chyb v gramatike.
nerozoznavalo to zaporne cisla. oprava prekladu operatora = na == v OpenCL kode zabudnuty not operator teraz parser neroznova velkost pismen
This commit is contained in:
parent
f8ba9ba239
commit
e68f5655b6
@ -19,7 +19,7 @@ namespace DEVS
|
||||
CDparser()
|
||||
{
|
||||
parser = new Parser(this);
|
||||
f.open("vstup");
|
||||
f.open("megarules2");
|
||||
if(f.bad())cout << "nepodarilo sa otvorit" <<endl;
|
||||
scanner = new Scanner(&f, &std::cout);
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -157,31 +157,33 @@ namespace DEVS {
|
||||
FALSE = 270,
|
||||
UNDEFB = 271,
|
||||
UNDEFC = 272,
|
||||
PLUS = 273,
|
||||
MINUS = 274,
|
||||
MUL = 275,
|
||||
DIV = 276,
|
||||
EXCEQV = 277,
|
||||
EQVSIGN = 278,
|
||||
GT = 279,
|
||||
LT = 280,
|
||||
GTEQV = 281,
|
||||
LTEQV = 282,
|
||||
COND_REAL_FUNC = 283,
|
||||
PORTVALUE = 284,
|
||||
SEND = 285,
|
||||
CELLPOS = 286,
|
||||
THISPORT = 287,
|
||||
IF = 288,
|
||||
IFU = 289,
|
||||
CONST_FUNC = 290,
|
||||
WITHOUT_PARAM_FUNC = 291,
|
||||
UNARY_FUNC = 292,
|
||||
BINARY_FUNC = 293,
|
||||
COMA = 294,
|
||||
INT = 295,
|
||||
REAL = 296,
|
||||
STRING = 297
|
||||
MUL = 273,
|
||||
DIV = 274,
|
||||
EXCEQV = 275,
|
||||
EQVSIGN = 276,
|
||||
GT = 277,
|
||||
LT = 278,
|
||||
GTEQV = 279,
|
||||
LTEQV = 280,
|
||||
COND_REAL_FUNC = 281,
|
||||
PORTVALUE = 282,
|
||||
SEND = 283,
|
||||
CELLPOS = 284,
|
||||
THISPORT = 285,
|
||||
IF = 286,
|
||||
IFU = 287,
|
||||
CONST_FUNC = 288,
|
||||
WITHOUT_PARAM_FUNC = 289,
|
||||
UNARY_FUNC = 290,
|
||||
BINARY_FUNC = 291,
|
||||
COMA = 292,
|
||||
RULETOKEN = 293,
|
||||
COLON = 294,
|
||||
UINT = 295,
|
||||
PLUS = 296,
|
||||
MINUS = 297,
|
||||
UREAL = 298,
|
||||
STRING = 299
|
||||
};
|
||||
|
||||
};
|
||||
@ -278,7 +280,7 @@ namespace DEVS {
|
||||
static const unsigned char yytable_[];
|
||||
static const signed char yytable_ninf_;
|
||||
|
||||
static const signed char yycheck_[];
|
||||
static const short int yycheck_[];
|
||||
|
||||
/// For a state, its accessing symbol.
|
||||
static const unsigned char yystos_[];
|
||||
@ -358,7 +360,7 @@ namespace DEVS {
|
||||
} // DEVS
|
||||
|
||||
/* Line 35 of lalr1.cc */
|
||||
#line 362 "parser.tab.hh"
|
||||
#line 364 "parser.tab.hh"
|
||||
|
||||
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
%token LBRACKET "(" RBRACKET ")" LCBRACKET "{" RCBRACKET "}" // ( ) { }
|
||||
%token AND "and" OR "or" XOR "xor" IMP "imp" EQV "eqv" NOT "not"// and or xor imp eqv not
|
||||
%token TRUE "t" FALSE "f" UNDEFB "?b" UNDEFC "?c" // t f ?
|
||||
%token PLUS "+" MINUS "-" MUL "*" DIV "/" // + - * /
|
||||
%token MUL "*" DIV "/" // + - * /
|
||||
%token EXCEQV "!=" EQVSIGN "=" GT ">" LT "<" GTEQV ">=" LTEQV "<=" // != = > < >= <=
|
||||
%token <stringVal> COND_REAL_FUNC // even odd isInt isPrime isUndefined
|
||||
%token PORTVALUE "portValue" SEND "send" CELLPOS "cellPos" // portValue send cellPos
|
||||
@ -36,9 +36,11 @@
|
||||
%token <stringVal> UNARY_FUNC "unary function"
|
||||
%token <stringVal> BINARY_FUNC "binary function"
|
||||
%token COMA "," // ,
|
||||
%token RULETOKEN "rule"
|
||||
%token COLON ":"
|
||||
|
||||
%token <intVal> INT
|
||||
%token <doubleVal> REAL
|
||||
%token <intVal> UINT PLUS "+" MINUS "-"
|
||||
%token <doubleVal> UREAL
|
||||
%token <stringVal> STRING
|
||||
|
||||
%left AND OR XOR IMP EQV
|
||||
@ -48,7 +50,8 @@
|
||||
%left MUL DIV
|
||||
%left LBRACKET RBRACKET
|
||||
|
||||
%type <doubleVal> CONSTANT BOOL
|
||||
%type <intVal> SIGN INT
|
||||
%type <doubleVal> CONSTANT BOOL REAL
|
||||
%type <stringVal> RULELIST RULE RESULT BOOLEXP REALRELEXP REALEXP IDREF FUNCTION CELLREF PORTNAME
|
||||
|
||||
|
||||
@ -67,10 +70,9 @@
|
||||
START : RULELIST { driver->parsed = *$1; delete $1; }
|
||||
|
||||
RULELIST : RULE END { $$ = $1; }
|
||||
| RULE NEWLINE END { $$ = $1; }
|
||||
| RULE NEWLINE RULELIST { $$=NEWSTR; *$$ = *$1 + "\n" + *$3; delete $1; delete $3; }
|
||||
| RULE RULELIST { $$=NEWSTR; *$$ = *$1 + "\n" + *$2; delete $1; delete $2; }
|
||||
|
||||
RULE : RESULT RESULT LCBRACKET BOOLEXP RCBRACKET { $$=NEWSTR; *$$ = "if("+*$4+"){"+*$1+"##"+*$2+"}"; delete $4; delete $1; delete $2; }
|
||||
RULE : RULETOKEN COLON RESULT RESULT LCBRACKET BOOLEXP RCBRACKET { $$=NEWSTR; *$$ = "if("+*$6+"){"+*$3+"##"+*$4+"}"; delete $6; delete $3; delete $4; }
|
||||
|
||||
RESULT : CONSTANT { $$=NEWSTR; if(isnan($1))*$$ = " NAN "; else *$$ = driver->toString($1); }
|
||||
| LCBRACKET REALEXP RCBRACKET { $$=NEWSTR; *$$ = "("+*$2+")"; delete $2; }
|
||||
@ -86,7 +88,7 @@ BOOLEXP : BOOL { $$=NEWSTR; if(isnan($1))*$$ = " NAN "; else *$$ = driver-
|
||||
| BOOLEXP EQV BOOLEXP { $$=NEWSTR; *$$ = "eqv("+*$1+", "+*$3+") "; delete $1; delete $3; }
|
||||
|
||||
REALRELEXP : REALEXP EXCEQV REALEXP { $$=NEWSTR; *$$ = *$1+"!="+*$3; delete $1; delete $3; }
|
||||
| REALEXP EQVSIGN REALEXP { $$=NEWSTR; *$$ = *$1+"="+*$3; delete $1; delete $3; }
|
||||
| REALEXP EQVSIGN REALEXP { $$=NEWSTR; *$$ = *$1+"=="+*$3; delete $1; delete $3; }
|
||||
| REALEXP GT REALEXP { $$=NEWSTR; *$$ = *$1+">"+*$3; delete $1; delete $3; }
|
||||
| REALEXP LT REALEXP { $$=NEWSTR; *$$ = *$1+"<"+*$3; delete $1; delete $3; }
|
||||
| REALEXP GTEQV REALEXP { $$=NEWSTR; *$$ = *$1+">="+*$3; delete $1; delete $3; }
|
||||
@ -96,9 +98,9 @@ REALRELEXP : REALEXP EXCEQV REALEXP { $$=NEWSTR; *$$ = *$1+"!="+*$3; delete $
|
||||
REALEXP : IDREF { $$=NEWSTR; *$$ = *$1; delete $1; }
|
||||
| LBRACKET REALEXP RBRACKET { $$=NEWSTR; *$$ = "("+*$2+")"; delete $2; }
|
||||
| REALEXP PLUS REALEXP { $$=NEWSTR; *$$ = *$1+"+"+*$3; delete $1; delete $3; }
|
||||
| REALEXP MINUS REALEXP { $$=NEWSTR; *$$ = *$1+"+"+*$3; delete $1; delete $3; }
|
||||
| REALEXP MUL REALEXP { $$=NEWSTR; *$$ = *$1+"+"+*$3; delete $1; delete $3; }
|
||||
| REALEXP DIV REALEXP { $$=NEWSTR; *$$ = *$1+"+"+*$3; delete $1; delete $3; }
|
||||
| REALEXP MINUS REALEXP { $$=NEWSTR; *$$ = *$1+"-"+*$3; delete $1; delete $3; }
|
||||
| REALEXP MUL REALEXP { $$=NEWSTR; *$$ = *$1+"*"+*$3; delete $1; delete $3; }
|
||||
| REALEXP DIV REALEXP { $$=NEWSTR; *$$ = *$1+"/"+*$3; delete $1; delete $3; }
|
||||
|
||||
IDREF : CELLREF { $$=NEWSTR; *$$ = *$1; delete $1; }
|
||||
| CONSTANT { $$=NEWSTR; *$$ = driver->toString($1); }
|
||||
@ -112,6 +114,15 @@ CONSTANT : INT { $$ = $1; }
|
||||
| CONST_FUNC { $$ = driver->constFunc($1); delete $1; }
|
||||
| UNDEFC { $$ = NAN; }
|
||||
|
||||
INT : UINT { $$ = $1; }
|
||||
| SIGN UINT { $$ = $1*$2; }
|
||||
|
||||
REAL : UREAL { $$ = $1; }
|
||||
| SIGN UREAL { $$ = $1*$2; }
|
||||
|
||||
SIGN : PLUS { $$ = $1; }
|
||||
| MINUS { $$ = $1; }
|
||||
|
||||
FUNCTION : UNARY_FUNC LBRACKET REALEXP RBRACKET { $$=NEWSTR; *$$ = *$1+"("+*$3+")"; delete $1; delete $3; }
|
||||
| WITHOUT_PARAM_FUNC { $$=NEWSTR; *$$ = *$1+"()"; delete $1; }
|
||||
| BINARY_FUNC LBRACKET REALEXP COMA REALEXP RBRACKET { $$=NEWSTR; *$$ = *$1+"("+*$3+","+*$5+")"; delete $1; delete $3; delete $5; }
|
||||
|
@ -31,23 +31,24 @@ typedef DEVS::Parser::token_type token_type;
|
||||
yylloc->step();
|
||||
%}
|
||||
|
||||
\%[^\n]*\n { yylloc->lines(); }
|
||||
\n { yylloc->lines(); return token::NEWLINE; }
|
||||
\%[^\n]*/\n { }
|
||||
\n { yylloc->lines(); }
|
||||
<<EOF>> { return token::END; }
|
||||
\{ { return token::LCBRACKET; }
|
||||
\} { return token::RCBRACKET; }
|
||||
\( { return token::LBRACKET; }
|
||||
\) { return token::RBRACKET; }
|
||||
[0-9]+ { yylval->intVal = atoi(YYText()); return token::INT; }
|
||||
[0-9]+\.[0-9]+ { yylval->doubleVal = atof(YYText()); return token::REAL; }
|
||||
[0-9]+ { yylval->intVal = atoi(YYText()); return token::UINT; }
|
||||
[0-9]+\.[0-9]+ { yylval->doubleVal = atof(YYText()); return token::UREAL; }
|
||||
t { return token::TRUE; }
|
||||
f { return token::FALSE; }
|
||||
\?b { return token::UNDEFB; }
|
||||
\?c { return token::UNDEFC; }
|
||||
\+ { return token::PLUS; }
|
||||
\- { return token::MINUS; }
|
||||
\+ { yylval->intVal = 1; return token::PLUS; }
|
||||
\- { yylval->intVal =-1; return token::MINUS; }
|
||||
\* { return token::MUL; }
|
||||
\/ { return token::DIV; }
|
||||
\: { return token::COLON; }
|
||||
"!=" { return token::EXCEQV; }
|
||||
"=" { return token::EQVSIGN; }
|
||||
">" { return token::GT; }
|
||||
@ -55,27 +56,29 @@ f { return token::FALSE; }
|
||||
">=" { return token::GTEQV; }
|
||||
"<=" { return token::LTEQV; }
|
||||
"," { return token::COMA; }
|
||||
"and" { return token::AND; }
|
||||
"or" { return token::OR; }
|
||||
"xor" { return token::XOR; }
|
||||
"imp" { return token::IMP; }
|
||||
"eqv" { return token::EQV; }
|
||||
(even|odd|isInt|isPrime|isUndefined) {
|
||||
(?i:and) { return token::AND; }
|
||||
(?i:or) { return token::OR; }
|
||||
(?i:xor) { return token::XOR; }
|
||||
(?i:imp) { return token::IMP; }
|
||||
(?i:eqv) { return token::EQV; }
|
||||
(?i:not) { return token::NOT; }
|
||||
(?i:(even|odd|isInt|isPrime|isUndefined)) {
|
||||
yylval->stringVal = new std::string(YYText()); return token::COND_REAL_FUNC; }
|
||||
(pi|e|inf|grav|accel|light|planck|avogadro|faraday|rydberg|euler_gamma|bohr_radius|boltzmann|bohr_magneton|golden|catalan|amu|electron_charge|ideal_gas|stefan_boltzmann|proton_mass|electron_mass|neutron_mass|pem) {
|
||||
(?i:(pi|e|inf|grav|accel|light|planck|avogadro|faraday|rydberg|euler_gamma|bohr_radius|boltzmann|bohr_magneton|golden|catalan|amu|electron_charge|ideal_gas|stefan_boltzmann|proton_mass|electron_mass|neutron_mass|pem)) {
|
||||
yylval->stringVal = new std::string(YYText()); return token::CONST_FUNC; }
|
||||
(truecount|falsecount|undefcount|time|random|randomSign) {
|
||||
(?i:(truecount|falsecount|undefcount|time|random|randomSign)) {
|
||||
yylval->stringVal = new std::string(YYText()); return token::WITHOUT_PARAM_FUNC; }
|
||||
(abs|acos|acosh|asin|asinh|atan|atanh|cos|sec|sech|exp|cosh|fact|fractional|ln|log|round|cotan|cosec|cosech|sign|sin|sinh|statecount|sqrt|tan|tanh|trunc|truncUpper|poisson|exponential|randInt|chi|asec|acotan|asech|acosech|nextPrime|radToDeg|degToRad|nth_prime|acotanh|CtoF|CtoK|KtoC|KtoF|FtoC|FtoK) {
|
||||
(?i:(abs|acos|acosh|asin|asinh|atan|atanh|cos|sec|sech|exp|cosh|fact|fractional|ln|log|round|cotan|cosec|cosech|sign|sin|sinh|statecount|sqrt|tan|tanh|trunc|truncUpper|poisson|exponential|randInt|chi|asec|acotan|asech|acosech|nextPrime|radToDeg|degToRad|nth_prime|acotanh|CtoF|CtoK|KtoC|KtoF|FtoC|FtoK)) {
|
||||
yylval->stringVal = new std::string(YYText()); return token::UNARY_FUNC; }
|
||||
(comb|logn|max|min|power|remainder|root|beta|gamma|lcm|gcd|normal|f|uniform|binomial|rectToPolar_r|rectToPolar_angle|polarToRect_x|hip|polarToRect_y) {
|
||||
(?i:(comb|logn|max|min|power|remainder|root|beta|gamma|lcm|gcd|normal|f|uniform|binomial|rectToPolar_r|rectToPolar_angle|polarToRect_x|hip|polarToRect_y)) {
|
||||
yylval->stringVal = new std::string(YYText()); return token::BINARY_FUNC; }
|
||||
"portValue" { return token::PORTVALUE; }
|
||||
"send" { return token::SEND; }
|
||||
"cellPos" { return token::CELLPOS; }
|
||||
"thisPort" { return token::THISPORT; }
|
||||
"ifu" { return token::IFU; }
|
||||
"if" { return token::IF; }
|
||||
(?i:portValue) { return token::PORTVALUE; }
|
||||
(?i:send) { return token::SEND; }
|
||||
(?i:cellPos) { return token::CELLPOS; }
|
||||
(?i:thisPort) { return token::THISPORT; }
|
||||
(?i:ifu) { return token::IFU; }
|
||||
(?i:if) { return token::IF; }
|
||||
(?i:rule) { return token::RULETOKEN; }
|
||||
[A-Za-z]+ { yylval->stringVal = new std::string(YYText()); return token::STRING; }
|
||||
. { }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user