Skip to content

Instantly share code, notes, and snippets.

@santoshrajan
Created October 11, 2017 07:15

Revisions

  1. santoshrajan created this gist Oct 11, 2017.
    26 changes: 26 additions & 0 deletions string-parser.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,26 @@
    import Foundation

    typealias ParseResult = (output: Any, rest: Substring)?

    func stringParser(input: Substring) -> ParseResult {
    if input[input.startIndex] != "\"" {
    return nil
    }
    var isEscape = true
    func inspectChar(char: Character) -> Bool {
    if char == "\"" && !isEscape {
    return true
    }
    if char == "\\" {
    isEscape = true
    } else {
    isEscape = false
    }
    return false
    }
    if let index = input.index(where: inspectChar) {
    return (input[input.index(after: input.startIndex)...input.index(before: index)],
    input[input.index(after: index)...])
    }
    return nil
    }