Create Parser.optional() helper method

This commit is contained in:
Bartłomiej Pluta
2019-07-06 23:08:12 +02:00
parent ace0e2b31f
commit 99e9fc7de5
2 changed files with 14 additions and 9 deletions

View File

@@ -42,13 +42,6 @@ class TypeNode(AccessNode):
@classmethod
def _parse(cls, input):
return Parser.oneOf(
cls._specifiedTypeParser(),
cls._rawTypeParser()
)(input)
@classmethod
def _specifiedTypeParser(cls):
def createNode(type, specifier):
node = TypeNode(type.pos)
node.type = type.value
@@ -57,9 +50,9 @@ class TypeNode(AccessNode):
return Parser.allOf(
cls._rawTypeParser(),
TypeSpecifier.parse,
Parser.optional(TypeSpecifier.parse),
createNode=createNode
)
)(input)
@classmethod
def _rawTypeParser(cls):

View File

@@ -1,5 +1,6 @@
from smnp.ast.node.ignore import IgnoredNode
from smnp.ast.node.model import ParseResult, Node
from smnp.ast.node.none import NoneNode
from smnp.error.syntax import SyntaxException
@@ -139,3 +140,14 @@ class Parser:
return result
return parse
@staticmethod
def optional(parser):
def parse(input):
result = parser(input)
if result.result:
return result
return ParseResult.OK(NoneNode())
return parse