infix-notation: something to test

This commit is contained in:
Alex Thannhauser 2025-06-05 13:43:52 -05:00
parent 3feedab95c
commit ea07e1072c

59
main.py
View file

@ -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;