Files
smnp-py/smnp/ast/node/program.py
Bartłomiej Pluta 28f32ea3d0 Perform cleaning code
2019-07-12 00:42:51 +02:00

37 lines
1.1 KiB
Python

from smnp.ast.node.extend import ExtendParser
from smnp.ast.node.function import FunctionDefinitionParser
from smnp.ast.node.imports import ImportParser
from smnp.ast.node.model import Node, ParseResult
from smnp.ast.node.statement import StatementParser
from smnp.ast.parser import Parser
from smnp.error.syntax import SyntaxException
class Program(Node):
def __init__(self):
super().__init__((-1, -1))
def ProgramParser(input):
def parse(input):
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():
result = startSymbolParser(input)
if result.result:
root.append(result.node)
return ParseResult.OK(root)
return Parser(parse, name="program")(input)