32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
from smnp.ast.node.expression import ExpressionNode
|
|
from smnp.ast.node.extend import ExtendNode
|
|
from smnp.ast.node.function import FunctionDefinitionNode
|
|
from smnp.ast.node.imports import ImportNode
|
|
from smnp.ast.node.model import Node, ParseResult
|
|
from smnp.ast.node.statement import StatementNode
|
|
from smnp.ast.parser import Parser
|
|
from smnp.error.syntax import SyntaxException
|
|
|
|
|
|
class Program(Node):
|
|
def __init__(self):
|
|
super().__init__((-1, -1))
|
|
|
|
@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) |