infix-notation: something to test
This commit is contained in:
parent
3feedab95c
commit
ea07e1072c
1 changed files with 32 additions and 27 deletions
59
main.py
59
main.py
|
|
@ -364,42 +364,47 @@ def get_simplifications(args, available_operators):
|
|||
def create_parser():
|
||||
import pyparsing as pp
|
||||
|
||||
from pyparsing import Forward, Suppress, Keyword, Group, ZeroOrMore, Optional, Literal
|
||||
root = pp.infix_notation(pp.Word("01wxyz"), [
|
||||
('!', 1, opAssoc.RIGHT),
|
||||
(oneOf('&& !& &!'), 2, opAssoc.LEFT),
|
||||
(oneOf('|| !| |!'), 2, opAssoc.LEFT)])
|
||||
|
||||
root = Forward()
|
||||
# from pyparsing import Forward, Suppress, Keyword, Group, ZeroOrMore, Optional, Literal
|
||||
|
||||
literal = pp.Word('01');
|
||||
# root = Forward()
|
||||
|
||||
variable = pp.Word('wxyz')
|
||||
# literal = pp.Word('01');
|
||||
|
||||
highest = literal | variable | (Suppress('(') + root + Suppress(')'));
|
||||
# variable = pp.Word('wxyz')
|
||||
|
||||
prefix_expression = Group(Literal("!") + highest) | highest
|
||||
# highest = literal | variable | (Suppress('(') + root + Suppress(')'));
|
||||
|
||||
relational_expression = \
|
||||
Group(prefix_expression + Literal('<=') + prefix_expression) \
|
||||
| Group(prefix_expression + Literal('>=') + prefix_expression) \
|
||||
| Group(prefix_expression + Literal('>') + prefix_expression) \
|
||||
| Group(prefix_expression + Literal('<') + prefix_expression) \
|
||||
| Group(prefix_expression + Literal('==') + prefix_expression) \
|
||||
| Group(prefix_expression + Literal('!=') + prefix_expression) \
|
||||
| prefix_expression;
|
||||
# prefix_expression = Group(Literal("!") + highest) | highest
|
||||
|
||||
logical_and_expression = Forward();
|
||||
logical_and_expression <<= \
|
||||
Group(relational_expression + Literal('&&') + logical_and_expression) \
|
||||
| Group(relational_expression + Literal('!&') + logical_and_expression) \
|
||||
| Group(relational_expression + Literal('&!') + logical_and_expression) \
|
||||
| relational_expression;
|
||||
# relational_expression = \
|
||||
# Group(prefix_expression + Literal('<=') + prefix_expression) \
|
||||
# | Group(prefix_expression + Literal('>=') + prefix_expression) \
|
||||
# | Group(prefix_expression + Literal('>') + prefix_expression) \
|
||||
# | Group(prefix_expression + Literal('<') + prefix_expression) \
|
||||
# | Group(prefix_expression + Literal('==') + prefix_expression) \
|
||||
# | Group(prefix_expression + Literal('!=') + prefix_expression) \
|
||||
# | prefix_expression;
|
||||
|
||||
logical_or_expression = Forward()
|
||||
logical_or_expression <<= \
|
||||
Group(logical_and_expression + Literal('||') + logical_or_expression) \
|
||||
| Group(logical_and_expression + Literal('!|') + logical_or_expression) \
|
||||
| Group(logical_and_expression + Literal('|!') + logical_or_expression) \
|
||||
| logical_and_expression;
|
||||
# logical_and_expression = Forward();
|
||||
# logical_and_expression <<= \
|
||||
# Group(relational_expression + Literal('&&') + logical_and_expression) \
|
||||
# | Group(relational_expression + Literal('!&') + logical_and_expression) \
|
||||
# | Group(relational_expression + Literal('&!') + logical_and_expression) \
|
||||
# | relational_expression;
|
||||
|
||||
root <<= logical_or_expression;
|
||||
# logical_or_expression = Forward()
|
||||
# logical_or_expression <<= \
|
||||
# Group(logical_and_expression + Literal('||') + logical_or_expression) \
|
||||
# | Group(logical_and_expression + Literal('!|') + logical_or_expression) \
|
||||
# | Group(logical_and_expression + Literal('|!') + logical_or_expression) \
|
||||
# | logical_and_expression;
|
||||
|
||||
# root <<= logical_or_expression;
|
||||
|
||||
return root;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue