From 99e9fc7de57f762560ebc75097ff1f9c6b20fecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Sat, 6 Jul 2019 23:08:12 +0200 Subject: [PATCH] Create Parser.optional() helper method --- smnp/ast/node/type.py | 11 ++--------- smnp/ast/parser.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/smnp/ast/node/type.py b/smnp/ast/node/type.py index d2a07d1..4612f09 100644 --- a/smnp/ast/node/type.py +++ b/smnp/ast/node/type.py @@ -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): diff --git a/smnp/ast/parser.py b/smnp/ast/parser.py index 96198f3..746cc66 100644 --- a/smnp/ast/parser.py +++ b/smnp/ast/parser.py @@ -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