Hacker News new | ask | show | jobs
by jawher 4152 days ago
Parser combinators would certainly have been easier for me, the library author but not necessarily so for the end user.

Contrast how it is done now:

  [-R [-H | -L | -P]] [-fi | -n] [-apvX] SRC... DST
With a parser combinator based approach:

  and(
    optional(and('-R', or('-H', '-L', '-P'))),
    optional(or(
                '-fi', 
                '-n'
             )
    ),
    optional('-apvX'),
    repeatable('SRC'),
    'DST')
And this didn't even handle the fact that options order is not important.
1 comments

For that I think you can do something similar to what mpc for C (https://github.com/orangeduck/mpc) and LPeg for Lua (http://www.inf.puc-rio.br/~roberto/lpeg/), which is to provide the parsing machinery and write a small DSL with the same machinery for the users.