Redundancy/conflicts in expression rules.
Iain Buclaw
ibuclaw at gdcproject.org
Wed Feb 12 16:00:10 PST 2014
This might be because the rules I have in place are not complete
(I'm not implementing a complete D expression parser), but I have
my doubts on this, and currently leaning on a possible problem in
the documentation.
I've built up rules in yacc based on what's documented here:
http://dlang.org/expression.html
However I seem to be getting shift/reduce conflicts around:
AndAndExpression:
OrExpression
| AndAndExpression && OrExpression
CmpExpression
| AndAndExpression && CmpExpression
;
OrExpression:
XorExpression
| OrExpression | XorExpression
;
XorExpression:
AndExpression
| XorExpression ^ AndExpression
;
AndExpression:
ShiftExpression
| AndExpression & ShiftExpression
;
CmpExpression:
ShiftExpression
| EqualExpression
| IdentityExpression
| RelExpression
;
CmpExpression:
ShiftExpression
| EqualExpression
| IdentityExpression
| RelExpression
;
---
Conflict between 'XorExpression: XorExpression '^' AndExpression'
and token '&'
Conflict between 'ShiftExpression: ShiftExpression RSH
AddExpression' and token '+'
Conflict between 'ShiftExpression: ShiftExpression RSH
AddExpression' and token '-'
Conflict between 'ShiftExpression: ShiftExpression LSH
AddExpression' and token '+'
Conflict between 'ShiftExpression: ShiftExpression LSH
AddExpression' and token '-'
Conflict between 'AddExpression: AddExpression '+' MulExpression'
and token '*'
Conflict between 'AddExpression: AddExpression '-' MulExpression'
and token '*'
---
It's not too much of a problem, I can tweak it (so it follows
same-ish rules as Java) and it will pass just fine:
AndAndExpression:
OrExpression
| AndAndExpression && OrExpression
;
OrExpression:
XorExpression
| OrExpression | XorExpression
;
XorExpression:
AndExpression
| XorExpression ^ AndExpression
;
AndExpression:
CmpExpression
| AndExpression & CmpExpression
;
CmpExpression:
ShiftExpression
| EqualExpression
| IdentityExpression
| RelExpression
;
I'm just curious if anyone else has stumbled onto this, and
whether or not it's just human error on my part. :o)
Regards
Iain.
More information about the Digitalmars-d
mailing list