diff --git a/Package.swift b/Package.swift
index 25d6091b3..b92f17209 100644
--- a/Package.swift
+++ b/Package.swift
@@ -34,7 +34,8 @@ let package = Package(
]),
.testTarget(
name: "MatchingEngineTests",
- dependencies: ["_MatchingEngine"]),
+ dependencies: [
+ "_MatchingEngine", "_StringProcessing"]),
.target(
name: "_StringProcessing",
dependencies: ["_MatchingEngine"],
@@ -50,7 +51,7 @@ let package = Package(
]),
.target(
name: "Prototypes",
- dependencies: ["_MatchingEngine"]),
+ dependencies: ["_MatchingEngine", "_StringProcessing"]),
// MARK: Scripts
.executableTarget(
diff --git a/Sources/Exercises/Participants/PEGParticipant.swift b/Sources/Exercises/Participants/PEGParticipant.swift
index 2b8a597f5..21bec6a7c 100644
--- a/Sources/Exercises/Participants/PEGParticipant.swift
+++ b/Sources/Exercises/Participants/PEGParticipant.swift
@@ -40,7 +40,7 @@ private func graphemeBreakPropertyData(forLine line: String) -> GraphemeBreakEnt
let program = PEG.Program(start: "Entry", environment: ["Entry": entry])
let vm = program.compile(for: String.self)
- let engine = try! program.transpile(for: String.self)
+ let engine = try! program.transpile()
_ = (vm, engine)
fatalError("Unsupported")
diff --git a/Sources/Prototypes/PEG/PEGCode.swift b/Sources/Prototypes/PEG/PEGCode.swift
index 2398ca2ff..c33f5759c 100644
--- a/Sources/Prototypes/PEG/PEGCode.swift
+++ b/Sources/Prototypes/PEG/PEGCode.swift
@@ -9,7 +9,7 @@
//
//===----------------------------------------------------------------------===//
-import _MatchingEngine
+import _StringProcessing
extension PEG.VM {
struct Code {
diff --git a/Sources/Prototypes/PEG/PEGCompile.swift b/Sources/Prototypes/PEG/PEGCompile.swift
index 7268de450..0592cf6a9 100644
--- a/Sources/Prototypes/PEG/PEGCompile.swift
+++ b/Sources/Prototypes/PEG/PEGCompile.swift
@@ -9,7 +9,7 @@
//
//===----------------------------------------------------------------------===//
-import _MatchingEngine
+import _StringProcessing
extension PEG.VM {
typealias InIndex = Input.Index
diff --git a/Sources/Prototypes/PEG/PEGCore.swift b/Sources/Prototypes/PEG/PEGCore.swift
index f8f4458a7..b831cbd0f 100644
--- a/Sources/Prototypes/PEG/PEGCore.swift
+++ b/Sources/Prototypes/PEG/PEGCore.swift
@@ -9,7 +9,7 @@
//
//===----------------------------------------------------------------------===//
-import _MatchingEngine
+import _StringProcessing
let emitComments = true
struct PEGCore<
diff --git a/Sources/Prototypes/PEG/PEGTranspile.swift b/Sources/Prototypes/PEG/PEGTranspile.swift
index a6f724a03..df75cea63 100644
--- a/Sources/Prototypes/PEG/PEGTranspile.swift
+++ b/Sources/Prototypes/PEG/PEGTranspile.swift
@@ -10,12 +10,13 @@
//===----------------------------------------------------------------------===//
import _MatchingEngine
+import _StringProcessing
-extension PEG.VM {
- typealias MEProgram = _MatchingEngine.Program
- func transpile() throws -> MEProgram {
- typealias Builder = MEProgram.Builder
- var builder = MEProgram.Builder()
+extension PEG.VM where Input == String {
+ typealias MEProg = MEProgram
+ func transpile() throws -> MEProg {
+ typealias Builder = MEProg.Builder
+ var builder = MEProg.Builder()
// Address token info
//
@@ -110,10 +111,9 @@ extension PEG.VM {
}
}
-extension PEG.Program {
- public func transpile(
- for input: Input.Type = Input.self
- ) throws -> Engine where Input.Element == Element {
- try Engine(compile(for: input).vm.transpile())
+extension PEG.Program where Element == Character {
+ public func transpile(
+ ) throws -> Engine {
+ try Engine(compile(for: String.self).vm.transpile())
}
}
diff --git a/Sources/Prototypes/PEG/PEGVM.swift b/Sources/Prototypes/PEG/PEGVM.swift
index 58faef2d2..a987b581d 100644
--- a/Sources/Prototypes/PEG/PEGVM.swift
+++ b/Sources/Prototypes/PEG/PEGVM.swift
@@ -9,7 +9,7 @@
//
//===----------------------------------------------------------------------===//
-import _MatchingEngine
+import _StringProcessing
extension PEG {
diff --git a/Sources/Prototypes/PEG/Printing.swift b/Sources/Prototypes/PEG/Printing.swift
index 5d1a8bc64..978250761 100644
--- a/Sources/Prototypes/PEG/Printing.swift
+++ b/Sources/Prototypes/PEG/Printing.swift
@@ -9,7 +9,7 @@
//
//===----------------------------------------------------------------------===//
-import _MatchingEngine
+import _StringProcessing
extension PEGCore.Instruction: InstructionProtocol {
var operandPC: InstructionAddress? { self.pc }
diff --git a/Sources/_StringProcessing/ByteCodeGen.swift b/Sources/_StringProcessing/ByteCodeGen.swift
index 8dbcb9026..cd50d5650 100644
--- a/Sources/_StringProcessing/ByteCodeGen.swift
+++ b/Sources/_StringProcessing/ByteCodeGen.swift
@@ -3,10 +3,10 @@ import _MatchingEngine
extension Compiler {
struct ByteCodeGen {
var options: MatchingOptions
- var builder = _MatchingEngine.Program.Builder()
+ var builder = Program.Builder()
mutating func finish(
- ) throws -> _MatchingEngine.Program {
+ ) throws -> Program {
builder.buildAccept()
return try builder.assemble()
}
diff --git a/Sources/_StringProcessing/Compiler.swift b/Sources/_StringProcessing/Compiler.swift
index 64491b8e2..2690e2e95 100644
--- a/Sources/_StringProcessing/Compiler.swift
+++ b/Sources/_StringProcessing/Compiler.swift
@@ -11,11 +11,6 @@
import _MatchingEngine
-struct RegexProgram {
- typealias Program = _MatchingEngine.Program
- var program: Program
-}
-
class Compiler {
let tree: DSLTree
@@ -30,12 +25,12 @@ class Compiler {
self.tree = tree
}
- __consuming func emit() throws -> RegexProgram {
+ __consuming func emit() throws -> Program {
// TODO: Handle global options
var codegen = ByteCodeGen(options: options)
try codegen.emitNode(tree.root)
let program = try codegen.finish()
- return RegexProgram(program: program)
+ return program
}
}
diff --git a/Sources/_StringProcessing/ConsumerInterface.swift b/Sources/_StringProcessing/ConsumerInterface.swift
index 3979dab34..b6cdbba5b 100644
--- a/Sources/_StringProcessing/ConsumerInterface.swift
+++ b/Sources/_StringProcessing/ConsumerInterface.swift
@@ -18,7 +18,7 @@ extension DSLTree.Node {
/// the front of an input range
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction? {
+ ) throws -> MEProgram.ConsumeFunction? {
switch self {
case .atom(let a):
return try a.generateConsumer(opts)
@@ -55,7 +55,7 @@ extension DSLTree.Atom {
// unnecessary...
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction? {
+ ) throws -> MEProgram.ConsumeFunction? {
switch self {
case let .char(c):
@@ -112,7 +112,7 @@ extension AST.Atom {
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction? {
+ ) throws -> MEProgram.ConsumeFunction? {
// TODO: Wean ourselves off of this type...
if let cc = self.characterClass?.withMatchLevel(
opts.matchLevel
@@ -171,7 +171,7 @@ extension AST.Atom {
extension DSLTree.CustomCharacterClass.Member {
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
switch self {
case let .atom(a):
guard let c = try a.generateConsumer(opts) else {
@@ -256,7 +256,7 @@ extension DSLTree.CustomCharacterClass.Member {
extension AST.CustomCharacterClass.Member {
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
switch self {
case .custom(let ccc):
return try ccc.generateConsumer(opts)
@@ -351,7 +351,7 @@ extension AST.CustomCharacterClass.Member {
extension DSLTree.CustomCharacterClass {
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
// NOTE: Easy way to implement, obviously not performant
let consumers = try members.map {
try $0.generateConsumer(opts)
@@ -374,7 +374,7 @@ extension DSLTree.CustomCharacterClass {
extension AST.CustomCharacterClass {
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
// NOTE: Easy way to implement, obviously not performant
let consumers = try strippingTriviaShallow.members.map {
try $0.generateConsumer(opts)
@@ -397,22 +397,22 @@ extension AST.CustomCharacterClass {
// NOTE: Conveniences, though not most performant
private func consumeScalarGC(
_ gc: Unicode.GeneralCategory
-) -> Program.ConsumeFunction {
+) -> MEProgram.ConsumeFunction {
consumeScalar { gc == $0.properties.generalCategory }
}
private func consumeScalarGCs(
_ gcs: [Unicode.GeneralCategory]
-) -> Program.ConsumeFunction {
+) -> MEProgram.ConsumeFunction {
consumeScalar { gcs.contains($0.properties.generalCategory) }
}
private func consumeScalarProp(
_ p: @escaping (Unicode.Scalar.Properties) -> Bool
-) -> Program.ConsumeFunction {
+) -> MEProgram.ConsumeFunction {
consumeScalar { p($0.properties) }
}
func consumeScalar(
_ p: @escaping (Unicode.Scalar) -> Bool
-) -> Program.ConsumeFunction {
+) -> MEProgram.ConsumeFunction {
{ input, bounds in
// TODO: bounds check?
let curIdx = bounds.lowerBound
@@ -427,11 +427,11 @@ func consumeScalar(
extension AST.Atom.CharacterProperty {
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
// Handle inversion for us, albeit not efficiently
func invert(
- _ p: @escaping Program.ConsumeFunction
- ) -> Program.ConsumeFunction {
+ _ p: @escaping MEProgram.ConsumeFunction
+ ) -> MEProgram.ConsumeFunction {
return { input, bounds in
if p(input, bounds) != nil { return nil }
// TODO: semantic level
@@ -444,7 +444,7 @@ extension AST.Atom.CharacterProperty {
// FIXME: Below is largely scalar based, for convenience,
// but we want a comprehensive treatment to semantic mode
// switching.
- let preInversion: Program.ConsumeFunction =
+ let preInversion: MEProgram.ConsumeFunction =
try {
switch kind {
// TODO: is this modeled differently?
@@ -498,7 +498,7 @@ extension Unicode.BinaryProperty {
// FIXME: Semantic level, vet for precise defs
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
switch self {
case .asciiHexDigit:
@@ -664,7 +664,7 @@ extension Unicode.POSIXProperty {
// FIXME: Semantic level, vet for precise defs
func generateConsumer(
_ opts: MatchingOptions
- ) -> Program.ConsumeFunction {
+ ) -> MEProgram.ConsumeFunction {
// FIXME: semantic levels, modes, etc
switch self {
case .alnum:
@@ -710,7 +710,7 @@ extension Unicode.ExtendedGeneralCategory {
// FIXME: Semantic level
func generateConsumer(
_ opts: MatchingOptions
- ) throws -> Program.ConsumeFunction {
+ ) throws -> MEProgram.ConsumeFunction {
switch self {
case .letter:
return consumeScalarGCs([
diff --git a/Sources/_MatchingEngine/Engine/Backtracking.swift b/Sources/_StringProcessing/Engine/Backtracking.swift
similarity index 100%
rename from Sources/_MatchingEngine/Engine/Backtracking.swift
rename to Sources/_StringProcessing/Engine/Backtracking.swift
diff --git a/Sources/_MatchingEngine/Engine/Consume.swift b/Sources/_StringProcessing/Engine/Consume.swift
similarity index 97%
rename from Sources/_MatchingEngine/Engine/Consume.swift
rename to Sources/_StringProcessing/Engine/Consume.swift
index 011e41a9d..e41115ad0 100644
--- a/Sources/_MatchingEngine/Engine/Consume.swift
+++ b/Sources/_StringProcessing/Engine/Consume.swift
@@ -34,7 +34,7 @@ extension Engine where Input == String {
public func consume(
_ input: Input,
in range: Range,
- matchMode: MatchMode = .prefix
+ matchMode: MatchMode = .partialFromFront
) -> (Input.Index, CaptureList)? {
if enableTracing {
print("Consume: \(input)")
diff --git a/Sources/_MatchingEngine/Engine/Engine.swift b/Sources/_StringProcessing/Engine/Engine.swift
similarity index 94%
rename from Sources/_MatchingEngine/Engine/Engine.swift
rename to Sources/_StringProcessing/Engine/Engine.swift
index 09f3b32c3..6c9c2efa5 100644
--- a/Sources/_MatchingEngine/Engine/Engine.swift
+++ b/Sources/_StringProcessing/Engine/Engine.swift
@@ -13,7 +13,7 @@
// But, we can play around with this.
public struct Engine where Input.Element: Hashable {
- var program: Program
+ var program: MEProgram
// TODO: Pre-allocated register banks
@@ -25,7 +25,7 @@ public struct Engine where Input.Element: Hashab
}
public init(
- _ program: Program,
+ _ program: MEProgram,
enableTracing: Bool? = nil
) {
var program = program
diff --git a/Sources/_MatchingEngine/Engine/InstPayload.swift b/Sources/_StringProcessing/Engine/InstPayload.swift
similarity index 100%
rename from Sources/_MatchingEngine/Engine/InstPayload.swift
rename to Sources/_StringProcessing/Engine/InstPayload.swift
diff --git a/Sources/_MatchingEngine/Engine/Instruction.swift b/Sources/_StringProcessing/Engine/Instruction.swift
similarity index 100%
rename from Sources/_MatchingEngine/Engine/Instruction.swift
rename to Sources/_StringProcessing/Engine/Instruction.swift
diff --git a/Sources/_MatchingEngine/Engine/Builder.swift b/Sources/_StringProcessing/Engine/MEBuilder.swift
similarity index 96%
rename from Sources/_MatchingEngine/Engine/Builder.swift
rename to Sources/_StringProcessing/Engine/MEBuilder.swift
index f6917b142..1f789a52b 100644
--- a/Sources/_MatchingEngine/Engine/Builder.swift
+++ b/Sources/_StringProcessing/Engine/MEBuilder.swift
@@ -9,7 +9,9 @@
//
//===----------------------------------------------------------------------===//
-extension Program where Input.Element: Hashable {
+import _MatchingEngine // For errors
+
+extension MEProgram where Input.Element: Hashable {
public struct Builder {
var instructions: [Instruction] = []
@@ -36,7 +38,7 @@ extension Program where Input.Element: Hashable {
}
}
-extension Program.Builder {
+extension MEProgram.Builder {
struct AddressFixup {
var first: AddressToken
var second: AddressToken? = nil
@@ -49,7 +51,7 @@ extension Program.Builder {
}
}
-extension Program.Builder {
+extension MEProgram.Builder {
// TODO: We want a better strategy for fixups, leaving
// the operand in a differenet form isn't great...
@@ -179,14 +181,14 @@ extension Program.Builder {
}
public mutating func buildConsume(
- by p: @escaping Program.ConsumeFunction
+ by p: @escaping MEProgram.ConsumeFunction
) {
instructions.append(.init(
.consumeBy, .init(consumer: makeConsumeFunction(p))))
}
public mutating func buildAssert(
- by p: @escaping Program.AssertionFunction
+ by p: @escaping MEProgram.AssertionFunction
) {
instructions.append(.init(
.assertBy, .init(assertion: makeAssertionFunction(p))))
@@ -230,7 +232,7 @@ extension Program.Builder {
// TODO: Mutating because of fail address fixup, drop when
// that's removed
- public mutating func assemble() throws -> Program {
+ public mutating func assemble() throws -> MEProgram {
// TODO: This will add a fail instruction at the end every
// time it's assembled. Better to do to the local instruction
// list copy, but that complicates logic. It's possible we
@@ -275,7 +277,7 @@ extension Program.Builder {
inst.opcode, payload)
}
- var regInfo = Program.RegisterInfo()
+ var regInfo = MEProgram.RegisterInfo()
regInfo.elements = elements.count
regInfo.sequences = sequences.count
regInfo.strings = strings.count
@@ -286,7 +288,7 @@ extension Program.Builder {
regInfo.assertionFunctions = assertionFunctions.count
regInfo.captures = nextCaptureRegister.rawValue
- return Program(
+ return MEProgram(
instructions: InstructionList(instructions),
staticElements: elements.stored,
staticSequences: sequences.stored,
@@ -300,7 +302,7 @@ extension Program.Builder {
}
// Address-agnostic interfaces for label-like support
-extension Program.Builder {
+extension MEProgram.Builder {
public enum _AddressToken {}
public typealias AddressToken = TypedInt<_AddressToken>
@@ -362,7 +364,7 @@ extension Program.Builder {
}
// Register helpers
-extension Program.Builder {
+extension MEProgram.Builder {
public mutating func makeCapture() -> CaptureRegister {
defer { nextCaptureRegister.rawValue += 1 }
return nextCaptureRegister
@@ -420,13 +422,13 @@ extension Program.Builder {
// registers without monotonicity required
public mutating func makeConsumeFunction(
- _ f: @escaping Program.ConsumeFunction
+ _ f: @escaping MEProgram.ConsumeFunction
) -> ConsumeFunctionRegister {
defer { consumeFunctions.append(f) }
return ConsumeFunctionRegister(consumeFunctions.count)
}
public mutating func makeAssertionFunction(
- _ f: @escaping Program.AssertionFunction
+ _ f: @escaping MEProgram.AssertionFunction
) -> AssertionFunctionRegister {
defer { assertionFunctions.append(f) }
return AssertionFunctionRegister(assertionFunctions.count)
diff --git a/Sources/_MatchingEngine/Engine/Capture.swift b/Sources/_StringProcessing/Engine/MECapture.swift
similarity index 100%
rename from Sources/_MatchingEngine/Engine/Capture.swift
rename to Sources/_StringProcessing/Engine/MECapture.swift
diff --git a/Sources/_MatchingEngine/Engine/Program.swift b/Sources/_StringProcessing/Engine/MEProgram.swift
similarity index 92%
rename from Sources/_MatchingEngine/Engine/Program.swift
rename to Sources/_StringProcessing/Engine/MEProgram.swift
index 5737fd8ee..c45882b32 100644
--- a/Sources/_MatchingEngine/Engine/Program.swift
+++ b/Sources/_StringProcessing/Engine/MEProgram.swift
@@ -9,7 +9,7 @@
//
//===----------------------------------------------------------------------===//
-public struct Program where Input.Element: Equatable {
+public struct MEProgram where Input.Element: Equatable {
public typealias ConsumeFunction = (Input, Range) -> Input.Index?
public typealias AssertionFunction =
(Input, Input.Index, Range) -> Bool
@@ -26,7 +26,7 @@ public struct Program where Input.Element: Equatable {
var enableTracing: Bool = false
}
-extension Program: CustomStringConvertible {
+extension MEProgram: CustomStringConvertible {
public var description: String {
var result = """
Elements: \(staticElements)
diff --git a/Sources/_MatchingEngine/Engine/Processor.swift b/Sources/_StringProcessing/Engine/Processor.swift
similarity index 98%
rename from Sources/_MatchingEngine/Engine/Processor.swift
rename to Sources/_StringProcessing/Engine/Processor.swift
index 7adcc9fa2..03217a518 100644
--- a/Sources/_MatchingEngine/Engine/Processor.swift
+++ b/Sources/_StringProcessing/Engine/Processor.swift
@@ -10,8 +10,8 @@
//===----------------------------------------------------------------------===//
public enum MatchMode {
- case full
- case `prefix`
+ case wholeString
+ case partialFromFront
}
/// A concrete CU. Somehow will run the concrete logic and
@@ -63,7 +63,7 @@ extension Processor {
extension Processor {
init(
- program: Program,
+ program: MEProgram,
input: Input,
bounds: Range,
matchMode: MatchMode,
@@ -182,12 +182,12 @@ extension Processor {
switch (currentPosition, matchMode) {
// When reaching the end of the match bounds or when we are only doing a
// prefix match, transition to accept.
- case (bounds.upperBound, _), (_, .prefix):
+ case (bounds.upperBound, _), (_, .partialFromFront):
state = .accept
// When we are doing a full match but did not reach the end of the match
// bounds, backtrack if possible.
- case (_, .full):
+ case (_, .wholeString):
signalFailure()
}
}
diff --git a/Sources/_MatchingEngine/Engine/Registers.swift b/Sources/_StringProcessing/Engine/Registers.swift
similarity index 93%
rename from Sources/_MatchingEngine/Engine/Registers.swift
rename to Sources/_StringProcessing/Engine/Registers.swift
index 1c6096674..d3834b1f0 100644
--- a/Sources/_MatchingEngine/Engine/Registers.swift
+++ b/Sources/_StringProcessing/Engine/Registers.swift
@@ -24,10 +24,10 @@ extension Processor {
var bools: [Bool] // TODO: bitset
// currently, these are static readonly
- var consumeFunctions: [Program.ConsumeFunction]
+ var consumeFunctions: [MEProgram.ConsumeFunction]
// currently, these are static readonly
- var assertionFunctions: [Program.AssertionFunction]
+ var assertionFunctions: [MEProgram.AssertionFunction]
// currently, these are for comments and abort messages
var strings: [String]
@@ -74,10 +74,10 @@ extension Processor {
subscript(_ i: ElementRegister) -> Element {
elements[i.rawValue]
}
- subscript(_ i: ConsumeFunctionRegister) -> Program.ConsumeFunction {
+ subscript(_ i: ConsumeFunctionRegister) -> MEProgram.ConsumeFunction {
consumeFunctions[i.rawValue]
}
- subscript(_ i: AssertionFunctionRegister) -> Program.AssertionFunction {
+ subscript(_ i: AssertionFunctionRegister) -> MEProgram.AssertionFunction {
assertionFunctions[i.rawValue]
}
}
@@ -85,7 +85,7 @@ extension Processor {
extension Processor.Registers {
init(
- _ program: Program,
+ _ program: MEProgram,
_ sentinel: Input.Index
) {
let info = program.registerInfo
@@ -123,7 +123,7 @@ extension Processor.Registers {
}
}
-extension Program {
+extension MEProgram {
struct RegisterInfo {
var elements = 0
var sequences = 0
diff --git a/Sources/_StringProcessing/Engine/StringProcessor.swift b/Sources/_StringProcessing/Engine/StringProcessor.swift
new file mode 100644
index 000000000..75ef97cec
--- /dev/null
+++ b/Sources/_StringProcessing/Engine/StringProcessor.swift
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// This source file is part of the Swift.org open source project
+//
+// Copyright (c) 2021-2022 Apple Inc. and the Swift project authors
+// Licensed under Apache License v2.0 with Runtime Library Exception
+//
+// See https://swift.org/LICENSE.txt for license information
+//
+//===----------------------------------------------------------------------===//
+
+typealias Program = MEProgram
+
+public struct MatchResult {
+ public var range: Range
+ var captures: Capture
+
+ var destructure: (
+ matched: Range, captures: Capture
+ ) {
+ (range, captures)
+ }
+
+ init(
+ _ matched: Range, _ captures: Capture
+ ) {
+ self.range = matched
+ self.captures = captures
+ }
+}
diff --git a/Sources/_MatchingEngine/Engine/Tracing.swift b/Sources/_StringProcessing/Engine/Tracing.swift
similarity index 100%
rename from Sources/_MatchingEngine/Engine/Tracing.swift
rename to Sources/_StringProcessing/Engine/Tracing.swift
diff --git a/Sources/_StringProcessing/Executor.swift b/Sources/_StringProcessing/Executor.swift
index a3c591df6..70fbb41d2 100644
--- a/Sources/_StringProcessing/Executor.swift
+++ b/Sources/_StringProcessing/Executor.swift
@@ -15,8 +15,8 @@ public struct Executor {
// TODO: consider let, for now lets us toggle tracing
var engine: Engine
- init(program: RegexProgram, enablesTracing: Bool = false) {
- self.engine = Engine(program.program, enableTracing: enablesTracing)
+ init(program: Program, enablesTracing: Bool = false) {
+ self.engine = Engine(program, enableTracing: enablesTracing)
}
public func execute(
@@ -25,7 +25,7 @@ public struct Executor {
mode: MatchMode = .wholeString
) -> MatchResult? {
engine.consume(
- input, in: range, matchMode: mode.loweredMatchMode
+ input, in: range, matchMode: mode
).map { endIndex, capture in
_ = capture // TODO: construct structure
return MatchResult(range.lowerBound.. (Range, CaptureList)? {
engine.consume(
- input, in: range, matchMode: mode.loweredMatchMode
+ input, in: range, matchMode: mode
).map { endIndex, capture in
(range.lowerBound..
- var captures: Capture
-
- var destructure: (
- matched: Range, captures: Capture
- ) {
- (range, captures)
- }
-
- init(
- _ matched: Range, _ captures: Capture
- ) {
- self.range = matched
- self.captures = captures
- }
-}
-
protocol VirtualMachine {
associatedtype Program
diff --git a/Sources/_MatchingEngine/Utility/Protocols.swift b/Sources/_StringProcessing/Utility/Protocols.swift
similarity index 100%
rename from Sources/_MatchingEngine/Utility/Protocols.swift
rename to Sources/_StringProcessing/Utility/Protocols.swift
diff --git a/Sources/_MatchingEngine/Utility/Formatting.swift b/Sources/_StringProcessing/Utility/Traced.swift
similarity index 100%
rename from Sources/_MatchingEngine/Utility/Formatting.swift
rename to Sources/_StringProcessing/Utility/Traced.swift
diff --git a/Sources/_MatchingEngine/Utility/TypedIndex.swift b/Sources/_StringProcessing/Utility/TypedIndex.swift
similarity index 100%
rename from Sources/_MatchingEngine/Utility/TypedIndex.swift
rename to Sources/_StringProcessing/Utility/TypedIndex.swift
diff --git a/Sources/_MatchingEngine/Utility/TypedInt.swift b/Sources/_StringProcessing/Utility/TypedInt.swift
similarity index 100%
rename from Sources/_MatchingEngine/Utility/TypedInt.swift
rename to Sources/_StringProcessing/Utility/TypedInt.swift
diff --git a/Tests/MatchingEngineTests/MatchingEngineTests.swift b/Tests/MatchingEngineTests/MatchingEngineTests.swift
index aac65733d..b7c89661d 100644
--- a/Tests/MatchingEngineTests/MatchingEngineTests.swift
+++ b/Tests/MatchingEngineTests/MatchingEngineTests.swift
@@ -11,7 +11,7 @@
import XCTest
-@testable import _MatchingEngine
+@testable import _StringProcessing
/// Hold context and run variety of ad-hoc tests
///
@@ -140,9 +140,9 @@ func show(_ s: CustomStringConvertible) {
}
func makeEngine(
- _ constructor: (inout Program.Builder) -> ()
+ _ constructor: (inout Program.Builder) -> ()
) -> Engine {
- var builder = Program.Builder()
+ var builder = Program.Builder()
constructor(&builder)
let program = try! builder.assemble()
let engine = Engine(program)