From 916c8c69ef0ac72043056663958202572b1e551b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 12 Jul 2019 15:11:36 +0200 Subject: [PATCH] Move list and map parsers to atom --- smnp/ast/node/atom.py | 4 ++++ smnp/ast/node/chain.py | 22 ++++++++-------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/smnp/ast/node/atom.py b/smnp/ast/node/atom.py index 1bfbb77..4b53b6d 100644 --- a/smnp/ast/node/atom.py +++ b/smnp/ast/node/atom.py @@ -76,10 +76,14 @@ def LiteralParser(input): def AtomParser(input): from smnp.ast.node.identifier import IdentifierParser + from smnp.ast.node.list import ListParser + from smnp.ast.node.map import MapParser return Parser.oneOf( LiteralParser, IdentifierParser, + ListParser, + MapParser, name="atom" )(input) diff --git a/smnp/ast/node/chain.py b/smnp/ast/node/chain.py index 59ec56d..74ad8dc 100644 --- a/smnp/ast/node/chain.py +++ b/smnp/ast/node/chain.py @@ -1,6 +1,4 @@ from smnp.ast.node.atom import AtomParser -from smnp.ast.node.list import ListParser -from smnp.ast.node.map import MapParser from smnp.ast.node.operator import BinaryOperator, UnaryOperator, Operator from smnp.ast.node.valuable import Valuable from smnp.ast.parser import Parser @@ -16,28 +14,24 @@ class MinusOperator(UnaryOperator): def ChainParser(input): - chain1 = Parser.oneOf( - ListParser, - MapParser, - AtomParser, - ) - minusOperator = Parser.allOf( Parser.terminal(TokenType.MINUS, createNode=Operator.withValue), - chain1, + Parser.doAssert(AtomParser, "atom"), createNode=MinusOperator.withValues, name="minus" ) - chain2 = Parser.oneOf( + atom2 = Parser.oneOf( minusOperator, - chain1 + AtomParser, + name="atom2" ) return Parser.leftAssociativeOperatorParser( - chain2, + atom2, [TokenType.DOT], - chain2, - lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right)) + Parser.doAssert(atom2, "atom"), + createNode=lambda left, op, right: Chain.withValue(BinaryOperator.withValues(left, op, right)), + name="chain" )(input)