Create parsers for literals (atoms)
This commit is contained in:
@@ -1,32 +1,44 @@
|
||||
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.atom import AtomParser
|
||||
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)
|
||||
def parse(input):
|
||||
root = Program()
|
||||
while input.hasCurrent():
|
||||
result = Parser.oneOf(
|
||||
# Start Symbol
|
||||
|
||||
root = Program()
|
||||
while input.hasCurrent():
|
||||
result = parseToken(input)
|
||||
if result.result:
|
||||
root.append(result.node)
|
||||
return ParseResult.OK(root)
|
||||
|
||||
#TODO -> temporary (to remove):
|
||||
AtomParser
|
||||
)(input)
|
||||
|
||||
if result.result:
|
||||
root.append(result.node)
|
||||
|
||||
return ParseResult.OK(root)
|
||||
|
||||
ProgramParser = Parser(parse, name="program")
|
||||
# @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)
|
||||
Reference in New Issue
Block a user