diff options
Diffstat (limited to 'parser.py')
| -rw-r--r-- | parser.py | 42 |
1 files changed, 4 insertions, 38 deletions
@@ -27,47 +27,13 @@ class Expr: def __str__(self): return f"'{self.name}" - class Nary: - def __init__(self, symbol, args): - self.symbol = symbol + class List: + def __init__(self, args): self.args = args def accept(self, visitor): visitor.visitNary(self) def __str__(self): - out = f"[{self.symbol} => (" - first = True - for arg in self.args: - if first: - out = f"{out} {arg}" - first = False - else: - out = f"{out}, {arg}" - return f"{out} )]" - - class Binary: - def __init__(self, symbol, left, right): - self.symbol = symbol - self.left = left - self.right = right - def accept(self, visitor): - visitor.visitBinary(self) - -class Visitor: - def visitLiteral(self, literal): - return literal.value - def visitBinary(self, binary): - sym = binary.symbol.text - left = binary.left.accept(self) - right = binary.right.accept(self) - return "({sym} {left} {right}" - def visitNary(self, nary): - sym = nary.symbol.text - args = [] - for arg in nary.args: - args.append(arg.accept(self)) - return "({sym} {' '.join(args)})" - def visitSymbol(self, symbol): - return symbol.name + return "(" + " ".join(f"{arg}" for arg in self.args) + ")" def parseExpression(token, prev, tokens): idx = 0 @@ -91,7 +57,7 @@ def parseExpression(token, prev, tokens): idx += inc prev = token - return Expr.Nary(args[0], args[1:]), idx + 2 # parens + return Expr.List(args), idx + 2 # parens def parseSymbol(token, prev, tokens): return Expr.Symbol(token.text), 1 |
