From 625d431d10306a0c6207a51a8a50cee0d4ba78d4 Mon Sep 17 00:00:00 2001 From: Nikolay Edigaryev Date: Tue, 6 Sep 2022 22:13:30 +0400 Subject: [PATCH] Revert "Improve RemoteName parser (#225)" (#230) This reverts commit ae7018c31f94ce7ceb0bbe34bf89e7d54e02d84f. --- Package.resolved | 36 +- Package.swift | 7 +- .../OCI/Reference/Generated/Reference.interp | 36 - .../OCI/Reference/Generated/Reference.tokens | 14 - .../Generated/ReferenceBaseListener.swift | 154 ---- .../Reference/Generated/ReferenceLexer.interp | 41 - .../Reference/Generated/ReferenceLexer.swift | 90 -- .../Reference/Generated/ReferenceLexer.tokens | 14 - .../Generated/ReferenceListener.swift | 117 --- .../Reference/Generated/ReferenceParser.swift | 781 ------------------ Sources/tart/OCI/Reference/Makefile | 5 - Sources/tart/OCI/Reference/Reference.g4 | 13 - Sources/tart/OCI/RemoteName.swift | 106 +-- Tests/TartTests/RemoteNameTests.swift | 4 - 14 files changed, 73 insertions(+), 1345 deletions(-) delete mode 100644 Sources/tart/OCI/Reference/Generated/Reference.interp delete mode 100644 Sources/tart/OCI/Reference/Generated/Reference.tokens delete mode 100644 Sources/tart/OCI/Reference/Generated/ReferenceBaseListener.swift delete mode 100644 Sources/tart/OCI/Reference/Generated/ReferenceLexer.interp delete mode 100644 Sources/tart/OCI/Reference/Generated/ReferenceLexer.swift delete mode 100644 Sources/tart/OCI/Reference/Generated/ReferenceLexer.tokens delete mode 100644 Sources/tart/OCI/Reference/Generated/ReferenceListener.swift delete mode 100644 Sources/tart/OCI/Reference/Generated/ReferenceParser.swift delete mode 100644 Sources/tart/OCI/Reference/Makefile delete mode 100644 Sources/tart/OCI/Reference/Reference.g4 diff --git a/Package.resolved b/Package.resolved index f32c6aa..caf8510 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,14 +1,5 @@ { "pins" : [ - { - "identity" : "antlr4", - "kind" : "remoteSourceControl", - "location" : "https://github.com/antlr/antlr4", - "state" : { - "branch" : "4.10.1", - "revision" : "44d87bc1d130c88aa452894aa5f7e2f710f68253" - } - }, { "identity" : "async-http-client", "kind" : "remoteSourceControl", @@ -54,6 +45,15 @@ "version" : "1.0.2" } }, + { + "identity" : "swift-case-paths", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-case-paths", + "state" : { + "revision" : "ce9c0d897db8a840c39de64caaa9b60119cf4be8", + "version" : "0.8.1" + } + }, { "identity" : "swift-log", "kind" : "remoteSourceControl", @@ -117,6 +117,15 @@ "version" : "1.0.2" } }, + { + "identity" : "swift-parsing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-parsing", + "state" : { + "revision" : "28d32e9ace1c4c43f5e5a177be837a202494c2d5", + "version" : "0.9.2" + } + }, { "identity" : "swiftdate", "kind" : "remoteSourceControl", @@ -125,6 +134,15 @@ "revision" : "6190d0cefff3013e77ed567e6b074f324e5c5bf5", "version" : "6.3.1" } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "50a70a9d3583fe228ce672e8923010c8df2deddd", + "version" : "0.2.1" + } } ], "version" : 2 diff --git a/Package.swift b/Package.swift index 36cfb51..e719352 100644 --- a/Package.swift +++ b/Package.swift @@ -12,10 +12,10 @@ let package = Package( dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser", from: "1.1.2"), .package(url: "https://github.com/mhdhejazi/Dynamic", branch: "master"), + .package(url: "https://github.com/pointfreeco/swift-parsing", from: "0.9.2"), .package(url: "https://github.com/swift-server/async-http-client", from: "1.11.4"), .package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0"), - .package(url: "https://github.com/malcommac/SwiftDate", from: "6.3.1"), - .package(url: "https://github.com/antlr/antlr4", revision: "4.10.1") + .package(url: "https://github.com/malcommac/SwiftDate", from: "6.3.1") ], targets: [ .executableTarget(name: "tart", dependencies: [ @@ -23,9 +23,10 @@ let package = Package( .product(name: "ArgumentParser", package: "swift-argument-parser"), .product(name: "AsyncHTTPClient", package: "async-http-client"), .product(name: "Dynamic", package: "Dynamic"), + .product(name: "Parsing", package: "swift-parsing"), .product(name: "SwiftDate", package: "SwiftDate"), - .product(name: "Antlr4", package: "Antlr4"), ]), .testTarget(name: "TartTests", dependencies: ["tart"]) ] ) + diff --git a/Sources/tart/OCI/Reference/Generated/Reference.interp b/Sources/tart/OCI/Reference/Generated/Reference.interp deleted file mode 100644 index bdbefb0..0000000 --- a/Sources/tart/OCI/Reference/Generated/Reference.interp +++ /dev/null @@ -1,36 +0,0 @@ -token literal names: -null -':' -'/' -'.' -'@' -'-' -'_' -null -null - -token symbolic names: -null -null -null -null -null -null -null -DIGIT -LETTER - -rule names: -root -host -port -namespace -namespace_component -reference -tag -separator -name - - -atn: -[4, 1, 8, 85, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 1, 0, 1, 0, 1, 0, 3, 0, 22, 8, 0, 1, 0, 1, 0, 1, 0, 3, 0, 27, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 34, 8, 1, 10, 1, 12, 1, 37, 9, 1, 1, 2, 4, 2, 40, 8, 2, 11, 2, 12, 2, 41, 1, 3, 1, 3, 1, 3, 5, 3, 47, 8, 3, 10, 3, 12, 3, 50, 9, 3, 1, 4, 1, 4, 3, 4, 54, 8, 4, 4, 4, 56, 8, 4, 11, 4, 12, 4, 57, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 67, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 73, 8, 6, 10, 6, 12, 6, 76, 9, 6, 1, 7, 1, 7, 1, 8, 4, 8, 81, 8, 8, 11, 8, 12, 8, 82, 1, 8, 0, 0, 9, 0, 2, 4, 6, 8, 10, 12, 14, 16, 0, 2, 2, 0, 3, 3, 5, 6, 1, 0, 7, 8, 85, 0, 18, 1, 0, 0, 0, 2, 30, 1, 0, 0, 0, 4, 39, 1, 0, 0, 0, 6, 43, 1, 0, 0, 0, 8, 55, 1, 0, 0, 0, 10, 66, 1, 0, 0, 0, 12, 68, 1, 0, 0, 0, 14, 77, 1, 0, 0, 0, 16, 80, 1, 0, 0, 0, 18, 21, 3, 2, 1, 0, 19, 20, 5, 1, 0, 0, 20, 22, 3, 4, 2, 0, 21, 19, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 24, 5, 2, 0, 0, 24, 26, 3, 6, 3, 0, 25, 27, 3, 10, 5, 0, 26, 25, 1, 0, 0, 0, 26, 27, 1, 0, 0, 0, 27, 28, 1, 0, 0, 0, 28, 29, 5, 0, 0, 1, 29, 1, 1, 0, 0, 0, 30, 35, 3, 16, 8, 0, 31, 32, 5, 3, 0, 0, 32, 34, 3, 16, 8, 0, 33, 31, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 3, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 40, 5, 7, 0, 0, 39, 38, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 41, 42, 1, 0, 0, 0, 42, 5, 1, 0, 0, 0, 43, 48, 3, 8, 4, 0, 44, 45, 5, 2, 0, 0, 45, 47, 3, 8, 4, 0, 46, 44, 1, 0, 0, 0, 47, 50, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 48, 49, 1, 0, 0, 0, 49, 7, 1, 0, 0, 0, 50, 48, 1, 0, 0, 0, 51, 53, 3, 16, 8, 0, 52, 54, 3, 14, 7, 0, 53, 52, 1, 0, 0, 0, 53, 54, 1, 0, 0, 0, 54, 56, 1, 0, 0, 0, 55, 51, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 57, 58, 1, 0, 0, 0, 58, 9, 1, 0, 0, 0, 59, 60, 5, 1, 0, 0, 60, 67, 3, 12, 6, 0, 61, 62, 5, 4, 0, 0, 62, 63, 3, 16, 8, 0, 63, 64, 5, 1, 0, 0, 64, 65, 3, 16, 8, 0, 65, 67, 1, 0, 0, 0, 66, 59, 1, 0, 0, 0, 66, 61, 1, 0, 0, 0, 67, 11, 1, 0, 0, 0, 68, 74, 3, 16, 8, 0, 69, 70, 3, 14, 7, 0, 70, 71, 3, 16, 8, 0, 71, 73, 1, 0, 0, 0, 72, 69, 1, 0, 0, 0, 73, 76, 1, 0, 0, 0, 74, 72, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 13, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 78, 7, 0, 0, 0, 78, 15, 1, 0, 0, 0, 79, 81, 7, 1, 0, 0, 80, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 83, 1, 0, 0, 0, 83, 17, 1, 0, 0, 0, 10, 21, 26, 35, 41, 48, 53, 57, 66, 74, 82] \ No newline at end of file diff --git a/Sources/tart/OCI/Reference/Generated/Reference.tokens b/Sources/tart/OCI/Reference/Generated/Reference.tokens deleted file mode 100644 index ec279c9..0000000 --- a/Sources/tart/OCI/Reference/Generated/Reference.tokens +++ /dev/null @@ -1,14 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -DIGIT=7 -LETTER=8 -':'=1 -'/'=2 -'.'=3 -'@'=4 -'-'=5 -'_'=6 diff --git a/Sources/tart/OCI/Reference/Generated/ReferenceBaseListener.swift b/Sources/tart/OCI/Reference/Generated/ReferenceBaseListener.swift deleted file mode 100644 index 4912e8d..0000000 --- a/Sources/tart/OCI/Reference/Generated/ReferenceBaseListener.swift +++ /dev/null @@ -1,154 +0,0 @@ -// Generated from Reference.g4 by ANTLR 4.10.1 - -import Antlr4 - - -/** - * This class provides an empty implementation of {@link ReferenceListener}, - * which can be extended to create a listener which only needs to handle a subset - * of the available methods. - */ -open class ReferenceBaseListener: ReferenceListener { - public init() { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterRoot(_ ctx: ReferenceParser.RootContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitRoot(_ ctx: ReferenceParser.RootContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterHost(_ ctx: ReferenceParser.HostContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitHost(_ ctx: ReferenceParser.HostContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterPort(_ ctx: ReferenceParser.PortContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitPort(_ ctx: ReferenceParser.PortContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterNamespace(_ ctx: ReferenceParser.NamespaceContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitNamespace(_ ctx: ReferenceParser.NamespaceContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterNamespace_component(_ ctx: ReferenceParser.Namespace_componentContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitNamespace_component(_ ctx: ReferenceParser.Namespace_componentContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterReference(_ ctx: ReferenceParser.ReferenceContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitReference(_ ctx: ReferenceParser.ReferenceContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterTag(_ ctx: ReferenceParser.TagContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitTag(_ ctx: ReferenceParser.TagContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterSeparator(_ ctx: ReferenceParser.SeparatorContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitSeparator(_ ctx: ReferenceParser.SeparatorContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterName(_ ctx: ReferenceParser.NameContext) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitName(_ ctx: ReferenceParser.NameContext) { } - - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func enterEveryRule(_ ctx: ParserRuleContext) throws { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func exitEveryRule(_ ctx: ParserRuleContext) throws { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func visitTerminal(_ node: TerminalNode) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - open func visitErrorNode(_ node: ErrorNode) { } -} \ No newline at end of file diff --git a/Sources/tart/OCI/Reference/Generated/ReferenceLexer.interp b/Sources/tart/OCI/Reference/Generated/ReferenceLexer.interp deleted file mode 100644 index 2ad7109..0000000 --- a/Sources/tart/OCI/Reference/Generated/ReferenceLexer.interp +++ /dev/null @@ -1,41 +0,0 @@ -token literal names: -null -':' -'/' -'.' -'@' -'-' -'_' -null -null - -token symbolic names: -null -null -null -null -null -null -null -DIGIT -LETTER - -rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -DIGIT -LETTER - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[4, 0, 8, 33, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 0, 0, 8, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 1, 0, 2, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 32, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 1, 17, 1, 0, 0, 0, 3, 19, 1, 0, 0, 0, 5, 21, 1, 0, 0, 0, 7, 23, 1, 0, 0, 0, 9, 25, 1, 0, 0, 0, 11, 27, 1, 0, 0, 0, 13, 29, 1, 0, 0, 0, 15, 31, 1, 0, 0, 0, 17, 18, 5, 58, 0, 0, 18, 2, 1, 0, 0, 0, 19, 20, 5, 47, 0, 0, 20, 4, 1, 0, 0, 0, 21, 22, 5, 46, 0, 0, 22, 6, 1, 0, 0, 0, 23, 24, 5, 64, 0, 0, 24, 8, 1, 0, 0, 0, 25, 26, 5, 45, 0, 0, 26, 10, 1, 0, 0, 0, 27, 28, 5, 95, 0, 0, 28, 12, 1, 0, 0, 0, 29, 30, 7, 0, 0, 0, 30, 14, 1, 0, 0, 0, 31, 32, 7, 1, 0, 0, 32, 16, 1, 0, 0, 0, 1, 0, 0] \ No newline at end of file diff --git a/Sources/tart/OCI/Reference/Generated/ReferenceLexer.swift b/Sources/tart/OCI/Reference/Generated/ReferenceLexer.swift deleted file mode 100644 index fee846b..0000000 --- a/Sources/tart/OCI/Reference/Generated/ReferenceLexer.swift +++ /dev/null @@ -1,90 +0,0 @@ -// Generated from Reference.g4 by ANTLR 4.10.1 -import Antlr4 - -open class ReferenceLexer: Lexer { - - internal static var _decisionToDFA: [DFA] = { - var decisionToDFA = [DFA]() - let length = ReferenceLexer._ATN.getNumberOfDecisions() - for i in 0.. Vocabulary { - return ReferenceLexer.VOCABULARY - } - - public - required init(_ input: CharStream) { - RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION) - super.init(input) - _interp = LexerATNSimulator(self, ReferenceLexer._ATN, ReferenceLexer._decisionToDFA, ReferenceLexer._sharedContextCache) - } - - override open - func getGrammarFileName() -> String { return "Reference.g4" } - - override open - func getRuleNames() -> [String] { return ReferenceLexer.ruleNames } - - override open - func getSerializedATN() -> [Int] { return ReferenceLexer._serializedATN } - - override open - func getChannelNames() -> [String] { return ReferenceLexer.channelNames } - - override open - func getModeNames() -> [String] { return ReferenceLexer.modeNames } - - override open - func getATN() -> ATN { return ReferenceLexer._ATN } - - static let _serializedATN:[Int] = [ - 4,0,8,33,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, - 2,7,7,7,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1, - 7,0,0,8,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,1,0,2,1,0,48,57,2,0,65,90,97, - 122,32,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11, - 1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,1,17,1,0,0,0,3,19,1,0,0,0,5,21,1,0,0, - 0,7,23,1,0,0,0,9,25,1,0,0,0,11,27,1,0,0,0,13,29,1,0,0,0,15,31,1,0,0,0, - 17,18,5,58,0,0,18,2,1,0,0,0,19,20,5,47,0,0,20,4,1,0,0,0,21,22,5,46,0,0, - 22,6,1,0,0,0,23,24,5,64,0,0,24,8,1,0,0,0,25,26,5,45,0,0,26,10,1,0,0,0, - 27,28,5,95,0,0,28,12,1,0,0,0,29,30,7,0,0,0,30,14,1,0,0,0,31,32,7,1,0,0, - 32,16,1,0,0,0,1,0,0 - ] - - public - static let _ATN: ATN = try! ATNDeserializer().deserialize(_serializedATN) -} \ No newline at end of file diff --git a/Sources/tart/OCI/Reference/Generated/ReferenceLexer.tokens b/Sources/tart/OCI/Reference/Generated/ReferenceLexer.tokens deleted file mode 100644 index ec279c9..0000000 --- a/Sources/tart/OCI/Reference/Generated/ReferenceLexer.tokens +++ /dev/null @@ -1,14 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -DIGIT=7 -LETTER=8 -':'=1 -'/'=2 -'.'=3 -'@'=4 -'-'=5 -'_'=6 diff --git a/Sources/tart/OCI/Reference/Generated/ReferenceListener.swift b/Sources/tart/OCI/Reference/Generated/ReferenceListener.swift deleted file mode 100644 index 2c05520..0000000 --- a/Sources/tart/OCI/Reference/Generated/ReferenceListener.swift +++ /dev/null @@ -1,117 +0,0 @@ -// Generated from Reference.g4 by ANTLR 4.10.1 -import Antlr4 - -/** - * This interface defines a complete listener for a parse tree produced by - * {@link ReferenceParser}. - */ -public protocol ReferenceListener: ParseTreeListener { - /** - * Enter a parse tree produced by {@link ReferenceParser#root}. - - Parameters: - - ctx: the parse tree - */ - func enterRoot(_ ctx: ReferenceParser.RootContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#root}. - - Parameters: - - ctx: the parse tree - */ - func exitRoot(_ ctx: ReferenceParser.RootContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#host}. - - Parameters: - - ctx: the parse tree - */ - func enterHost(_ ctx: ReferenceParser.HostContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#host}. - - Parameters: - - ctx: the parse tree - */ - func exitHost(_ ctx: ReferenceParser.HostContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#port}. - - Parameters: - - ctx: the parse tree - */ - func enterPort(_ ctx: ReferenceParser.PortContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#port}. - - Parameters: - - ctx: the parse tree - */ - func exitPort(_ ctx: ReferenceParser.PortContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#namespace}. - - Parameters: - - ctx: the parse tree - */ - func enterNamespace(_ ctx: ReferenceParser.NamespaceContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#namespace}. - - Parameters: - - ctx: the parse tree - */ - func exitNamespace(_ ctx: ReferenceParser.NamespaceContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#namespace_component}. - - Parameters: - - ctx: the parse tree - */ - func enterNamespace_component(_ ctx: ReferenceParser.Namespace_componentContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#namespace_component}. - - Parameters: - - ctx: the parse tree - */ - func exitNamespace_component(_ ctx: ReferenceParser.Namespace_componentContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#reference}. - - Parameters: - - ctx: the parse tree - */ - func enterReference(_ ctx: ReferenceParser.ReferenceContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#reference}. - - Parameters: - - ctx: the parse tree - */ - func exitReference(_ ctx: ReferenceParser.ReferenceContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#tag}. - - Parameters: - - ctx: the parse tree - */ - func enterTag(_ ctx: ReferenceParser.TagContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#tag}. - - Parameters: - - ctx: the parse tree - */ - func exitTag(_ ctx: ReferenceParser.TagContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#separator}. - - Parameters: - - ctx: the parse tree - */ - func enterSeparator(_ ctx: ReferenceParser.SeparatorContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#separator}. - - Parameters: - - ctx: the parse tree - */ - func exitSeparator(_ ctx: ReferenceParser.SeparatorContext) - /** - * Enter a parse tree produced by {@link ReferenceParser#name}. - - Parameters: - - ctx: the parse tree - */ - func enterName(_ ctx: ReferenceParser.NameContext) - /** - * Exit a parse tree produced by {@link ReferenceParser#name}. - - Parameters: - - ctx: the parse tree - */ - func exitName(_ ctx: ReferenceParser.NameContext) -} \ No newline at end of file diff --git a/Sources/tart/OCI/Reference/Generated/ReferenceParser.swift b/Sources/tart/OCI/Reference/Generated/ReferenceParser.swift deleted file mode 100644 index af3a4c5..0000000 --- a/Sources/tart/OCI/Reference/Generated/ReferenceParser.swift +++ /dev/null @@ -1,781 +0,0 @@ -// Generated from Reference.g4 by ANTLR 4.10.1 -import Antlr4 - -open class ReferenceParser: Parser { - - internal static var _decisionToDFA: [DFA] = { - var decisionToDFA = [DFA]() - let length = ReferenceParser._ATN.getNumberOfDecisions() - for i in 0.. String { return "Reference.g4" } - - override open - func getRuleNames() -> [String] { return ReferenceParser.ruleNames } - - override open - func getSerializedATN() -> [Int] { return ReferenceParser._serializedATN } - - override open - func getATN() -> ATN { return ReferenceParser._ATN } - - - override open - func getVocabulary() -> Vocabulary { - return ReferenceParser.VOCABULARY - } - - override public - init(_ input:TokenStream) throws { - RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION) - try super.init(input) - _interp = ParserATNSimulator(self,ReferenceParser._ATN,ReferenceParser._decisionToDFA, ReferenceParser._sharedContextCache) - } - - - public class RootContext: ParserRuleContext { - open - func host() -> HostContext? { - return getRuleContext(HostContext.self, 0) - } - open - func namespace() -> NamespaceContext? { - return getRuleContext(NamespaceContext.self, 0) - } - open - func EOF() -> TerminalNode? { - return getToken(ReferenceParser.Tokens.EOF.rawValue, 0) - } - open - func port() -> PortContext? { - return getRuleContext(PortContext.self, 0) - } - open - func reference() -> ReferenceContext? { - return getRuleContext(ReferenceContext.self, 0) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_root - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterRoot(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitRoot(self) - } - } - } - @discardableResult - open func root() throws -> RootContext { - var _localctx: RootContext - _localctx = RootContext(_ctx, getState()) - try enterRule(_localctx, 0, ReferenceParser.RULE_root) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(18) - try host() - setState(21) - try _errHandler.sync(self) - _la = try _input.LA(1) - if (//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.T__0.rawValue - return testSet - }()) { - setState(19) - try match(ReferenceParser.Tokens.T__0.rawValue) - setState(20) - try port() - - } - - setState(23) - try match(ReferenceParser.Tokens.T__1.rawValue) - setState(24) - try namespace() - setState(26) - try _errHandler.sync(self) - _la = try _input.LA(1) - if (//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.T__0.rawValue || _la == ReferenceParser.Tokens.T__3.rawValue - return testSet - }()) { - setState(25) - try reference() - - } - - setState(28) - try match(ReferenceParser.Tokens.EOF.rawValue) - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class HostContext: ParserRuleContext { - open - func name() -> [NameContext] { - return getRuleContexts(NameContext.self) - } - open - func name(_ i: Int) -> NameContext? { - return getRuleContext(NameContext.self, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_host - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterHost(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitHost(self) - } - } - } - @discardableResult - open func host() throws -> HostContext { - var _localctx: HostContext - _localctx = HostContext(_ctx, getState()) - try enterRule(_localctx, 2, ReferenceParser.RULE_host) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(30) - try name() - setState(35) - try _errHandler.sync(self) - _la = try _input.LA(1) - while (//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.T__2.rawValue - return testSet - }()) { - setState(31) - try match(ReferenceParser.Tokens.T__2.rawValue) - setState(32) - try name() - - - setState(37) - try _errHandler.sync(self) - _la = try _input.LA(1) - } - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class PortContext: ParserRuleContext { - open - func DIGIT() -> [TerminalNode] { - return getTokens(ReferenceParser.Tokens.DIGIT.rawValue) - } - open - func DIGIT(_ i:Int) -> TerminalNode? { - return getToken(ReferenceParser.Tokens.DIGIT.rawValue, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_port - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterPort(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitPort(self) - } - } - } - @discardableResult - open func port() throws -> PortContext { - var _localctx: PortContext - _localctx = PortContext(_ctx, getState()) - try enterRule(_localctx, 4, ReferenceParser.RULE_port) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(39) - try _errHandler.sync(self) - _la = try _input.LA(1) - repeat { - setState(38) - try match(ReferenceParser.Tokens.DIGIT.rawValue) - - - setState(41); - try _errHandler.sync(self) - _la = try _input.LA(1) - } while (//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.DIGIT.rawValue - return testSet - }()) - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class NamespaceContext: ParserRuleContext { - open - func namespace_component() -> [Namespace_componentContext] { - return getRuleContexts(Namespace_componentContext.self) - } - open - func namespace_component(_ i: Int) -> Namespace_componentContext? { - return getRuleContext(Namespace_componentContext.self, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_namespace - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterNamespace(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitNamespace(self) - } - } - } - @discardableResult - open func namespace() throws -> NamespaceContext { - var _localctx: NamespaceContext - _localctx = NamespaceContext(_ctx, getState()) - try enterRule(_localctx, 6, ReferenceParser.RULE_namespace) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(43) - try namespace_component() - setState(48) - try _errHandler.sync(self) - _la = try _input.LA(1) - while (//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.T__1.rawValue - return testSet - }()) { - setState(44) - try match(ReferenceParser.Tokens.T__1.rawValue) - setState(45) - try namespace_component() - - - setState(50) - try _errHandler.sync(self) - _la = try _input.LA(1) - } - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class Namespace_componentContext: ParserRuleContext { - open - func name() -> [NameContext] { - return getRuleContexts(NameContext.self) - } - open - func name(_ i: Int) -> NameContext? { - return getRuleContext(NameContext.self, i) - } - open - func separator() -> [SeparatorContext] { - return getRuleContexts(SeparatorContext.self) - } - open - func separator(_ i: Int) -> SeparatorContext? { - return getRuleContext(SeparatorContext.self, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_namespace_component - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterNamespace_component(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitNamespace_component(self) - } - } - } - @discardableResult - open func namespace_component() throws -> Namespace_componentContext { - var _localctx: Namespace_componentContext - _localctx = Namespace_componentContext(_ctx, getState()) - try enterRule(_localctx, 8, ReferenceParser.RULE_namespace_component) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(55) - try _errHandler.sync(self) - _la = try _input.LA(1) - repeat { - setState(51) - try name() - setState(53) - try _errHandler.sync(self) - _la = try _input.LA(1) - if (//closure - { () -> Bool in - let testSet: Bool = { () -> Bool in - let testArray: [Int] = [_la, ReferenceParser.Tokens.T__2.rawValue,ReferenceParser.Tokens.T__4.rawValue,ReferenceParser.Tokens.T__5.rawValue] - return Utils.testBitLeftShiftArray(testArray, 0) - }() - return testSet - }()) { - setState(52) - try separator() - - } - - - - setState(57); - try _errHandler.sync(self) - _la = try _input.LA(1) - } while (//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.DIGIT.rawValue || _la == ReferenceParser.Tokens.LETTER.rawValue - return testSet - }()) - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class ReferenceContext: ParserRuleContext { - open - func tag() -> TagContext? { - return getRuleContext(TagContext.self, 0) - } - open - func name() -> [NameContext] { - return getRuleContexts(NameContext.self) - } - open - func name(_ i: Int) -> NameContext? { - return getRuleContext(NameContext.self, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_reference - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterReference(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitReference(self) - } - } - } - @discardableResult - open func reference() throws -> ReferenceContext { - var _localctx: ReferenceContext - _localctx = ReferenceContext(_ctx, getState()) - try enterRule(_localctx, 10, ReferenceParser.RULE_reference) - defer { - try! exitRule() - } - do { - setState(66) - try _errHandler.sync(self) - switch (ReferenceParser.Tokens(rawValue: try _input.LA(1))!) { - case .T__0: - try enterOuterAlt(_localctx, 1) - setState(59) - try match(ReferenceParser.Tokens.T__0.rawValue) - setState(60) - try tag() - - - break - - case .T__3: - try enterOuterAlt(_localctx, 2) - setState(61) - try match(ReferenceParser.Tokens.T__3.rawValue) - setState(62) - try name() - setState(63) - try match(ReferenceParser.Tokens.T__0.rawValue) - setState(64) - try name() - - - break - default: - throw ANTLRException.recognition(e: NoViableAltException(self)) - } - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class TagContext: ParserRuleContext { - open - func name() -> [NameContext] { - return getRuleContexts(NameContext.self) - } - open - func name(_ i: Int) -> NameContext? { - return getRuleContext(NameContext.self, i) - } - open - func separator() -> [SeparatorContext] { - return getRuleContexts(SeparatorContext.self) - } - open - func separator(_ i: Int) -> SeparatorContext? { - return getRuleContext(SeparatorContext.self, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_tag - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterTag(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitTag(self) - } - } - } - @discardableResult - open func tag() throws -> TagContext { - var _localctx: TagContext - _localctx = TagContext(_ctx, getState()) - try enterRule(_localctx, 12, ReferenceParser.RULE_tag) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(68) - try name() - setState(74) - try _errHandler.sync(self) - _la = try _input.LA(1) - while (//closure - { () -> Bool in - let testSet: Bool = { () -> Bool in - let testArray: [Int] = [_la, ReferenceParser.Tokens.T__2.rawValue,ReferenceParser.Tokens.T__4.rawValue,ReferenceParser.Tokens.T__5.rawValue] - return Utils.testBitLeftShiftArray(testArray, 0) - }() - return testSet - }()) { - setState(69) - try separator() - setState(70) - try name() - - - setState(76) - try _errHandler.sync(self) - _la = try _input.LA(1) - } - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class SeparatorContext: ParserRuleContext { - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_separator - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterSeparator(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitSeparator(self) - } - } - } - @discardableResult - open func separator() throws -> SeparatorContext { - var _localctx: SeparatorContext - _localctx = SeparatorContext(_ctx, getState()) - try enterRule(_localctx, 14, ReferenceParser.RULE_separator) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - try enterOuterAlt(_localctx, 1) - setState(77) - _la = try _input.LA(1) - if (!(//closure - { () -> Bool in - let testSet: Bool = { () -> Bool in - let testArray: [Int] = [_la, ReferenceParser.Tokens.T__2.rawValue,ReferenceParser.Tokens.T__4.rawValue,ReferenceParser.Tokens.T__5.rawValue] - return Utils.testBitLeftShiftArray(testArray, 0) - }() - return testSet - }())) { - try _errHandler.recoverInline(self) - } - else { - _errHandler.reportMatch(self) - try consume() - } - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - public class NameContext: ParserRuleContext { - open - func LETTER() -> [TerminalNode] { - return getTokens(ReferenceParser.Tokens.LETTER.rawValue) - } - open - func LETTER(_ i:Int) -> TerminalNode? { - return getToken(ReferenceParser.Tokens.LETTER.rawValue, i) - } - open - func DIGIT() -> [TerminalNode] { - return getTokens(ReferenceParser.Tokens.DIGIT.rawValue) - } - open - func DIGIT(_ i:Int) -> TerminalNode? { - return getToken(ReferenceParser.Tokens.DIGIT.rawValue, i) - } - override open - func getRuleIndex() -> Int { - return ReferenceParser.RULE_name - } - override open - func enterRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.enterName(self) - } - } - override open - func exitRule(_ listener: ParseTreeListener) { - if let listener = listener as? ReferenceListener { - listener.exitName(self) - } - } - } - @discardableResult - open func name() throws -> NameContext { - var _localctx: NameContext - _localctx = NameContext(_ctx, getState()) - try enterRule(_localctx, 16, ReferenceParser.RULE_name) - var _la: Int = 0 - defer { - try! exitRule() - } - do { - var _alt:Int - try enterOuterAlt(_localctx, 1) - setState(80); - try _errHandler.sync(self) - _alt = 1; - repeat { - switch (_alt) { - case 1: - setState(79) - _la = try _input.LA(1) - if (!(//closure - { () -> Bool in - let testSet: Bool = _la == ReferenceParser.Tokens.DIGIT.rawValue || _la == ReferenceParser.Tokens.LETTER.rawValue - return testSet - }())) { - try _errHandler.recoverInline(self) - } - else { - _errHandler.reportMatch(self) - try consume() - } - - - break - default: - throw ANTLRException.recognition(e: NoViableAltException(self)) - } - setState(82); - try _errHandler.sync(self) - _alt = try getInterpreter().adaptivePredict(_input,9,_ctx) - } while (_alt != 2 && _alt != ATN.INVALID_ALT_NUMBER) - - } - catch ANTLRException.recognition(let re) { - _localctx.exception = re - _errHandler.reportError(self, re) - try _errHandler.recover(self, re) - } - - return _localctx - } - - static let _serializedATN:[Int] = [ - 4,1,8,85,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7, - 7,2,8,7,8,1,0,1,0,1,0,3,0,22,8,0,1,0,1,0,1,0,3,0,27,8,0,1,0,1,0,1,1,1, - 1,1,1,5,1,34,8,1,10,1,12,1,37,9,1,1,2,4,2,40,8,2,11,2,12,2,41,1,3,1,3, - 1,3,5,3,47,8,3,10,3,12,3,50,9,3,1,4,1,4,3,4,54,8,4,4,4,56,8,4,11,4,12, - 4,57,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,67,8,5,1,6,1,6,1,6,1,6,5,6,73,8,6, - 10,6,12,6,76,9,6,1,7,1,7,1,8,4,8,81,8,8,11,8,12,8,82,1,8,0,0,9,0,2,4,6, - 8,10,12,14,16,0,2,2,0,3,3,5,6,1,0,7,8,85,0,18,1,0,0,0,2,30,1,0,0,0,4,39, - 1,0,0,0,6,43,1,0,0,0,8,55,1,0,0,0,10,66,1,0,0,0,12,68,1,0,0,0,14,77,1, - 0,0,0,16,80,1,0,0,0,18,21,3,2,1,0,19,20,5,1,0,0,20,22,3,4,2,0,21,19,1, - 0,0,0,21,22,1,0,0,0,22,23,1,0,0,0,23,24,5,2,0,0,24,26,3,6,3,0,25,27,3, - 10,5,0,26,25,1,0,0,0,26,27,1,0,0,0,27,28,1,0,0,0,28,29,5,0,0,1,29,1,1, - 0,0,0,30,35,3,16,8,0,31,32,5,3,0,0,32,34,3,16,8,0,33,31,1,0,0,0,34,37, - 1,0,0,0,35,33,1,0,0,0,35,36,1,0,0,0,36,3,1,0,0,0,37,35,1,0,0,0,38,40,5, - 7,0,0,39,38,1,0,0,0,40,41,1,0,0,0,41,39,1,0,0,0,41,42,1,0,0,0,42,5,1,0, - 0,0,43,48,3,8,4,0,44,45,5,2,0,0,45,47,3,8,4,0,46,44,1,0,0,0,47,50,1,0, - 0,0,48,46,1,0,0,0,48,49,1,0,0,0,49,7,1,0,0,0,50,48,1,0,0,0,51,53,3,16, - 8,0,52,54,3,14,7,0,53,52,1,0,0,0,53,54,1,0,0,0,54,56,1,0,0,0,55,51,1,0, - 0,0,56,57,1,0,0,0,57,55,1,0,0,0,57,58,1,0,0,0,58,9,1,0,0,0,59,60,5,1,0, - 0,60,67,3,12,6,0,61,62,5,4,0,0,62,63,3,16,8,0,63,64,5,1,0,0,64,65,3,16, - 8,0,65,67,1,0,0,0,66,59,1,0,0,0,66,61,1,0,0,0,67,11,1,0,0,0,68,74,3,16, - 8,0,69,70,3,14,7,0,70,71,3,16,8,0,71,73,1,0,0,0,72,69,1,0,0,0,73,76,1, - 0,0,0,74,72,1,0,0,0,74,75,1,0,0,0,75,13,1,0,0,0,76,74,1,0,0,0,77,78,7, - 0,0,0,78,15,1,0,0,0,79,81,7,1,0,0,80,79,1,0,0,0,81,82,1,0,0,0,82,80,1, - 0,0,0,82,83,1,0,0,0,83,17,1,0,0,0,10,21,26,35,41,48,53,57,66,74,82 - ] - - public - static let _ATN = try! ATNDeserializer().deserialize(_serializedATN) -} \ No newline at end of file diff --git a/Sources/tart/OCI/Reference/Makefile b/Sources/tart/OCI/Reference/Makefile deleted file mode 100644 index de4f530..0000000 --- a/Sources/tart/OCI/Reference/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -all: clean - antlr -o Generated -Dlanguage=Swift Reference.g4 - -clean: - rm -rf Generated diff --git a/Sources/tart/OCI/Reference/Reference.g4 b/Sources/tart/OCI/Reference/Reference.g4 deleted file mode 100644 index 2251a68..0000000 --- a/Sources/tart/OCI/Reference/Reference.g4 +++ /dev/null @@ -1,13 +0,0 @@ -grammar Reference; - -root: host (':' port)? '/' namespace reference? EOF; -host: name ('.' name)*; -port: DIGIT+; -namespace: namespace_component ('/' namespace_component)*; -namespace_component: (name separator?)+; -reference: (':' tag) | ('@' name ':' name); -tag: name (separator name)*; -separator: '.' | '-' | '_'; -name: (LETTER | DIGIT)+; -DIGIT: [0-9]; -LETTER: [A-Za-z]; diff --git a/Sources/tart/OCI/RemoteName.swift b/Sources/tart/OCI/RemoteName.swift index 2ddb35e..5ac6740 100644 --- a/Sources/tart/OCI/RemoteName.swift +++ b/Sources/tart/OCI/RemoteName.swift @@ -1,5 +1,5 @@ import Foundation -import Antlr4 +import Parsing struct Reference: Comparable, Hashable, CustomStringConvertible { enum ReferenceType: Comparable { @@ -46,39 +46,6 @@ struct Reference: Comparable, Hashable, CustomStringConvertible { } } -class ReferenceCollector: ReferenceBaseListener { - var host: String? = nil - var port: String? = nil - var namespace: String? = nil - var reference: String? = nil - - override func exitHost(_ ctx: ReferenceParser.HostContext) { - host = ctx.getText() - } - - override func exitPort(_ ctx: ReferenceParser.PortContext) { - port = ctx.getText() - } - - override func exitNamespace(_ ctx: ReferenceParser.NamespaceContext) { - namespace = ctx.getText() - } - - override func exitReference(_ ctx: ReferenceParser.ReferenceContext) { - reference = ctx.getText() - } -} - -class ErrorCollector: BaseErrorListener { - var error: String? = nil - - override func syntaxError(_ recognizer: Recognizer, _ offendingSymbol: AnyObject?, _ line: Int, _ charPositionInLine: Int, _ msg: String, _ e: AnyObject?) { - if error == nil { - error = "\(msg) (character \(charPositionInLine + 1))" - } - } -} - struct RemoteName: Comparable, Hashable, CustomStringConvertible { var host: String var namespace: String @@ -91,40 +58,51 @@ struct RemoteName: Comparable, Hashable, CustomStringConvertible { } init(_ name: String) throws { - let errorCollector = ErrorCollector() - let inputStream = ANTLRInputStream(Array(name.unicodeScalars), name.count) - let lexer = ReferenceLexer(inputStream) - lexer.removeErrorListeners() - lexer.addErrorListener(errorCollector) + let csNormal = [ + UInt8(ascii: "a")...UInt8(ascii: "z"), + UInt8(ascii: "A")...UInt8(ascii: "Z"), + UInt8(ascii: "0")...UInt8(ascii: "9"), + ].asCharacterSet().union(CharacterSet(charactersIn: "_-.")) - let tokenStream = CommonTokenStream(lexer) - let parser = try ReferenceParser(tokenStream) - parser.removeErrorListeners() - parser.addErrorListener(errorCollector) + let csHex = [ + UInt8(ascii: "a")...UInt8(ascii: "f"), + UInt8(ascii: "0")...UInt8(ascii: "9"), + ].asCharacterSet() - let referenceCollector = ReferenceCollector() - try ParseTreeWalker().walk(referenceCollector, try parser.root()) - - if let error = errorCollector.error { - throw RuntimeError("failed to parse remote name: \(error)") - } - - host = referenceCollector.host! - if let port = referenceCollector.port { - host += ":" + port - } - namespace = referenceCollector.namespace! - if let reference = referenceCollector.reference { - if reference.starts(with: "@sha256:") { - self.reference = Reference(digest: String(reference.dropFirst(1))) - } else if reference.starts(with: ":") { - self.reference = Reference(tag: String(reference.dropFirst(1))) - } else { - throw RuntimeError("failed to parse remote name: unknown reference format") + let parser = Parse { + Consumed { + csNormal + Optionally { + ":" + Digits() + } } - } else { - self.reference = Reference(tag: "latest") + "/" + csNormal.union(CharacterSet(charactersIn: "/")) + Optionally { + OneOf { + Parse { + ":" + csNormal.map { + Reference(tag: String($0)) + } + } + Parse { + "@sha256:" + csHex.map { + Reference(digest: "sha256:" + String($0)) + } + } + } + } + End() } + + let result = try parser.parse(name) + + host = String(result.0) + namespace = String(result.1) + reference = result.2 ?? Reference(tag: "latest") } static func <(lhs: RemoteName, rhs: RemoteName) -> Bool { diff --git a/Tests/TartTests/RemoteNameTests.swift b/Tests/TartTests/RemoteNameTests.swift index 577d97f..a0cdc71 100644 --- a/Tests/TartTests/RemoteNameTests.swift +++ b/Tests/TartTests/RemoteNameTests.swift @@ -44,8 +44,4 @@ final class RemoteNameTests: XCTestCase { // Port must be specified when ":" is used XCTAssertEqual(try? RemoteName("127.0.0.1:/a/b").host, nil) } - - func testNoPathTraversal() throws { - XCTAssertEqual(try? RemoteName("ghcr.io/a/../b/c:latest"), nil) - } }