Perform cleaning code

This commit is contained in:
Bartłomiej Pluta
2019-07-12 00:42:51 +02:00
parent e71bffcf5d
commit 28f32ea3d0
7 changed files with 14 additions and 136 deletions

View File

@@ -19,14 +19,13 @@ def ExpressionParser(input):
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right)) lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
) )
expr2 = Parser.leftAssociativeOperatorParser( expr2 = Parser.leftAssociativeOperatorParser(
expr1, expr1,
[TokenType.RELATION, TokenType.OPEN_ANGLE, TokenType.CLOSE_ANGLE], [TokenType.RELATION, TokenType.OPEN_ANGLE, TokenType.CLOSE_ANGLE],
expr1, expr1,
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right)) lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
) )
expr3 = Parser.leftAssociativeOperatorParser( expr3 = Parser.leftAssociativeOperatorParser(
expr2, expr2,
[TokenType.AND], [TokenType.AND],
@@ -34,7 +33,6 @@ def ExpressionParser(input):
lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right)) lambda left, op, right: Expression.withValue(BinaryOperator.withValues(left, op, right))
) )
expr4 = Parser.leftAssociativeOperatorParser( expr4 = Parser.leftAssociativeOperatorParser(
expr3, expr3,
[TokenType.OR], [TokenType.OR],

View File

@@ -54,8 +54,6 @@ def IdentifierLiteralParser(input):
def IdentifierParser(input): def IdentifierParser(input):
functionCallParser = Parser.allOf( functionCallParser = Parser.allOf(
IdentifierLiteralParser, IdentifierLiteralParser,
abstractIterableParser(ArgumentsList, TokenType.OPEN_PAREN, TokenType.CLOSE_PAREN, ExpressionParser), abstractIterableParser(ArgumentsList, TokenType.OPEN_PAREN, TokenType.CLOSE_PAREN, ExpressionParser),

View File

@@ -1,11 +1,3 @@
# from smnp.ast.node.identifier import Identifier
# from smnp.ast.node.model import Node
# from smnp.ast.node.none import NoneNode
# from smnp.ast.node.string import StringLiteralNode
# from smnp.ast.node.type import TypeNode
# from smnp.ast.parser import Parser
# from smnp.token.type import TokenType
#
from smnp.ast.node.atom import StringParser from smnp.ast.node.atom import StringParser
from smnp.ast.node.model import Node from smnp.ast.node.model import Node
from smnp.ast.parser import Parser from smnp.ast.parser import Parser

View File

@@ -28,21 +28,6 @@ class Node:
def pop(self, index): def pop(self, index):
return self.children.pop(index) return self.children.pop(index)
@classmethod
def _parse(cls, input):
pass
@classmethod
def parse(cls, input):
result = cls._parse(input)
if result is None:
return ParseResult.FAIL()
if not isinstance(result, ParseResult):
raise RuntimeError(f"_parse() method of '{cls.__name__}' class haven't returned ParseResult object")
return result
def print(self): def print(self):
self._print(first=True) self._print(first=True)

View File

@@ -4,6 +4,7 @@ from smnp.ast.node.imports import ImportParser
from smnp.ast.node.model import Node, ParseResult from smnp.ast.node.model import Node, ParseResult
from smnp.ast.node.statement import StatementParser from smnp.ast.node.statement import StatementParser
from smnp.ast.parser import Parser from smnp.ast.parser import Parser
from smnp.error.syntax import SyntaxException
class Program(Node): class Program(Node):
@@ -13,15 +14,19 @@ class Program(Node):
def ProgramParser(input): def ProgramParser(input):
def parse(input): def parse(input):
root = Program() root = Program()
# Start Symbol
startSymbolParser = Parser.oneOf(
ImportParser,
FunctionDefinitionParser,
ExtendParser,
StatementParser,
exception=lambda inp: SyntaxException(f"Invalid statement: {inp.currentToEndOfLine()}", inp.current().pos),
name="start symbol"
)
while input.hasCurrent(): while input.hasCurrent():
result = Parser.oneOf( result = startSymbolParser(input)
# Start Symbol
ImportParser,
FunctionDefinitionParser,
ExtendParser,
StatementParser,
exception=RuntimeError("Nie znam tego wyrazenia")
)(input)
if result.result: if result.result:
root.append(result.node) root.append(result.node)
@@ -29,21 +34,3 @@ def ProgramParser(input):
return ParseResult.OK(root) return ParseResult.OK(root)
return Parser(parse, name="program")(input) return Parser(parse, name="program")(input)
# @classmethod
# def _parse(cls, input):
# def parseToken(input):
# return Parser.oneOf(
# FunctionDefinitionNode.parse,
# ExtendNode.parse,
# ExpressionNode.parse,
# ImportNode.parse,
# StatementNode.parse,
# exception = SyntaxException(f"Invalid statement: {input.currentToEndOfLine()}", input.current().pos)
# )(input)
#
# root = Program()
# while input.hasCurrent():
# result = parseToken(input)
# if result.result:
# root.append(result.node)
# return ParseResult.OK(root)

View File

@@ -18,17 +18,3 @@ def StatementParser(input):
) )
return Parser(parser, "statement", parser)(input) return Parser(parser, "statement", parser)(input)
# class StatementNode(Node):
#
# @classmethod
# def _parse(cls, input):
# from smnp.ast.node.block import BlockNode
# from smnp.ast.node.expression import ExpressionNode
# from smnp.ast.node.ret import ReturnNode
#
# return Parser.oneOf(
# ExpressionNode.parse,
# BlockNode.parse,
# ReturnNode.parse,
# )(input)

View File

@@ -1,10 +1,3 @@
# from smnp.ast.node.iterable import abstractIterableParser
# from smnp.ast.node.model import Node
# from smnp.ast.node.operator import LeftAssociativeOperatorNode
# from smnp.ast.parser import Parser
# from smnp.token.type import TokenType
# from smnp.type.model import Type
#
from smnp.ast.node.atom import TypeLiteralParser from smnp.ast.node.atom import TypeLiteralParser
from smnp.ast.node.iterable import abstractIterableParser from smnp.ast.node.iterable import abstractIterableParser
from smnp.ast.node.model import Node from smnp.ast.node.model import Node
@@ -47,10 +40,6 @@ class TypesList(Node):
def TypesListParser(input): def TypesListParser(input):
typeListItem = Parser.oneOf(
TypeParser
)
return abstractIterableParser( return abstractIterableParser(
TypesList, TypesList,
TokenType.OPEN_ANGLE, TokenType.OPEN_ANGLE,
@@ -76,60 +65,3 @@ def TypeParser(input):
TypesListParser, TypesListParser,
name="mult. types or type with specifier" name="mult. types or type with specifier"
)(input) )(input)
# class TypeSpecifier(Node):
#
# @classmethod
# def _parse(cls, input):
# return abstractIterableParser(TypeSpecifier, TokenType.OPEN_ANGLE, TokenType.CLOSE_ANGLE,
# Parser.doAssert(cls._specifierItem(), "type"))(input)
#
# @classmethod
# def _specifierItem(cls):
# return Parser.oneOf(
# TypeNode.parse,
# cls.parse
# )
#
# class TypeSpecifiers(Node):
# pass
#
#
# class TypeNode(LeftAssociativeOperatorNode):
# def __init__(self, pos):
# super().__init__(pos)
#
# @property
# def type(self):
# return self[0]
#
# @type.setter
# def type(self, value):
# self[0] = value
#
# @property
# def specifiers(self):
# return self[1]
#
# @specifiers.setter
# def specifiers(self, value):
# self[1] = value
#
# @classmethod
# def _parse(cls, input):
# def createNode(type, specifiers):
# node = TypeNode(type.pos)
# node.type = Type[type.value.upper()]
# node.specifiers = specifiers
# return node
#
# return Parser.allOf(
# cls._rawTypeParser(),
# Parser.many(TypeSpecifier.parse, lambda specifiers, pos: TypeSpecifiers.withChildren(specifiers, pos)),
# createNode=createNode
# )(input)
#
# @classmethod
# def _rawTypeParser(cls):
# return Parser.terminalParser(TokenType.TYPE, lambda val, pos: TypeNode.withValue(val, pos))