From c7e90b9fbd77178290b11965fe02c9d72ba847d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 12 Jul 2019 16:49:25 +0200 Subject: [PATCH] Add 'assertExpected' to Parser.oneOf() method --- smnp/ast/parser.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/smnp/ast/parser.py b/smnp/ast/parser.py index dbe49b7..ffe5f72 100644 --- a/smnp/ast/parser.py +++ b/smnp/ast/parser.py @@ -62,7 +62,7 @@ class Parser: # oneOf -> a | b | c | ... @staticmethod - def oneOf(*parsers, exception=None, name="or"): + def oneOf(*parsers, assertExpected=None, exception=None, name="or"): def combinedParser(input): snap = input.snapshot() for parser in parsers: @@ -70,6 +70,10 @@ class Parser: if value.result: return value + if assertExpected is not None: + found = f", found '{input.current().rawValue}'" if input.hasCurrent() else "" + raise SyntaxException(f"Expected {assertExpected}{found}", input.currentPos()) + if exception is not None: if callable(exception): raise exception(input)