> On Jan 24, 2017, at 2:05 AM, Chris Eidhof via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I agree that being able to implement parsers in a nice way can be a huge step 
> forward in being really good at string processing.
> 
> There are a couple of possibilities that come to mind directly:
> 
> 1. Build parsers right into the language (like Perl 6 grammars)
> 2. Provide a parser combinator language (e.g. 
> https://github.com/davedufresne/SwiftParsec 
> <https://github.com/davedufresne/SwiftParsec>). 
> 3. Rely on external tools like bison/yacc/etc.
> 4. Make it easy for people to write hand-written parsers (e.g. by providing 
> an NSScanner alternative).
> 
> Some obvious drawbacks of each approach:
> 
> 1. Lots of work, probably hard to get right?
> 2. Only way to do this, afaik, is using lots of functional programming which 
> might scare people off. Also probably it's hard to get performance as fast as 
> 1.

FWIW, it is quite possible to do things very similar to parser combinators 
without functional programming.  What you need is a way to create and compose 
small parser fragments, ideally an EDSL approaching something like EBNF that 
allows users to build a grammar out of the parser fragments, and a way to 
execute / interpret the resulting grammar during parsing.  

The functional approach would not be the most idiomatic approach in Swift and 
as you note, it probably wouldn’t have the performance a more idiomatic 
approach could achieve (too much copying).

My intuition is that a hybrid 1 / 2 approach might be best: do as much as 
possible in the library and let the design drive new language enhancements 
where necessary.

> 3. No clear integrated way to do this
> 4. You still have to know how to write a parser.
> 
> I would think that 4. would be a good step forward, and 1/2 would definitely 
> benefit from this.
> 
> Also, I'd love to have this functionality on sequence/collection types, 
> rather than Strings. For example, it can be tremendously helpful to parse a 
> binary format using proper parsers. Or maybe you would want to use an 
> event-driven XML parser as "tokenizer" and parse that. Plenty of cool 
> possibilities.
> 
> On Tue, Jan 24, 2017 at 8:46 AM, Russ Bishop via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>> On Jan 23, 2017, at 2:27 PM, Joe Groff via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>>> 
>>> On Jan 23, 2017, at 2:06 PM, Ben Cohen via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> 
>>>> On Jan 23, 2017, at 7:49 AM, Joshua Alvarado <alvaradojosh...@gmail.com 
>>>> <mailto:alvaradojosh...@gmail.com>> wrote:
>>>> 
>>>> Taken from NSHipster <http://nshipster.com/nsregularexpression/>:
>>>> Happily, on one thing we can all agree. In NSRegularExpression, Cocoa has 
>>>> the most long-winded and byzantine regular expression interface you’re 
>>>> ever likely to come across.
>>>> 
>>>> There is no way to achieve the goal of being better at string processing 
>>>> than Perl without regular expressions being addressed. It just should not 
>>>> be ignored. 
>>> 
>>> 
>>> We’re certainly not ignoring the importance of regexes. But if there’s a 
>>> key takeaway from your experiences with NSRegularExpression, it’s that a 
>>> good regex implementation matters, a lot. That’s why we don’t want to rush 
>>> one in alongside the rest of the overhaul of String. Instead, we should 
>>> take our time to make it really great, and building on a solid foundation 
>>> of a good String API that’s already in place should help ensure that.
>> 
>> I do think that there's some danger to focusing too narrowly on regular 
>> expressions as they appear in languages today. I think the industry has 
>> largely moved on to fully-structured formats that require proper parsing 
>> beyond what traditional regexes can handle. The decades of experience with 
>> Perl shows that making regexes too easy to use without an easy ramp up to 
>> more sophisticated string processing leads to people cutting corners trying 
>> to make regex-based designs kind-of work. The Perl 6 folks recognized this 
>> and developed their "regular expression" support into something that 
>> supported arbitrary grammars; I think we'd do well to start at that level by 
>> looking at what they've done.
>> 
>> -Joe
>> 
> 
> I fully agree. I think we could learn something from Perl 6 grammars. As 
> PCREs are to languages without regex, Perl 6 grammars are to languages with 
> PCREs. 
> 
> A lot of really crappy user interfaces and bad tools come down to half-assed 
> parsers; maybe we can do better? (Another argument against rushing it).
> 
> 
> Russ
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> 
> 
> -- 
> Chris Eidhof
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to