From b8f63045b235ab07aabde5e8f41213df3ecfb872 Mon Sep 17 00:00:00 2001 From: Piotr Swigon Date: Wed, 31 Mar 2021 20:48:56 -0700 Subject: [PATCH] Opens up Arcs code to more directories. PiperOrigin-RevId: 366175605 --- java/arcs/core/util/Parser.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/java/arcs/core/util/Parser.kt b/java/arcs/core/util/Parser.kt index 95b6268a488..eba462be56c 100644 --- a/java/arcs/core/util/Parser.kt +++ b/java/arcs/core/util/Parser.kt @@ -394,6 +394,19 @@ class ManyOfParser(val parser: Parser) : Parser>() { } } +/** + * A parser providing a name for debugging purposes (traceback) but delegates parsing. + */ +class NamedParser(name: String, val parser: Parser) : Parser() { + + init { + this.name = name + } + + override fun invoke(string: String, pos: SourcePosition) = parser.invoke(string, pos) + override fun leftTokens() = parser.leftTokens() +} + class ParserException(msg: String, cause: Exception) : Exception(msg, cause) /** A parser which converts the return value of a parser into another value. */ @@ -587,6 +600,9 @@ fun many(parser: Parser) = ManyOfParser(parser) /** Helper for [AnyOfParser]. */ fun any(parsers: List>) = AnyOfParser(parsers) +/** Helper for [NamedParser] */ +fun Parser.named(name: String) = NamedParser(name, this) + /** Helper for [TransformParser]. */ fun Parser.map(f: (T) -> R) = TransformParser(this, f)