From ea07e1072c30c5f746ae2ae662039711bc212f6a Mon Sep 17 00:00:00 2001 From: Alex Thannhauser Date: Thu, 5 Jun 2025 13:43:52 -0500 Subject: [PATCH] infix-notation: something to test --- main.py | 59 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/main.py b/main.py index 2f3e49d..f6ca5ba 100755 --- a/main.py +++ b/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;