Been working on this a few months. It’s inspired by previous generations of parser generators, and by my own previous work generating ast lexers from grammar files. This integrates seamlessly with the type system, allowing you to declare your syntax, extract only the data you want as variables, and evaluate them easily. And just from a simple description of your syntax, you’ll get beautiful errors which visually point out structures in the input.

With this I have been able to implement a (mostly complete) JSON parser in just 12 lines of parsing logic, and a pmdas-respecting expression parser in just 6 (with one helper function to apply individual operators).

Examples available on the github repo, also now available on crates.io!

  • Chaphasilor [he/him]@feddit.nl
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    1
    ·
    9 months ago

    So what, I can write a parser in JavaScript in a single line
    \s

    Jokes aside, that does look neat and like a really clever solution that is very fammiliar right from the start!

  • Alex
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    6 months ago

    Looking to example code in the README I have to say that it is neat! ❤️‍🔥 But know what? Could be awesome to support char-literals in the parser! macro. Currently in that example str-literals used as single-char strings. I mean this for example:

    num: num=<"-"? '0'-'9'+ …
    

    Why there dash is str but not a char? Also what about escapes, unicode sequences and binary literals?

    • redempt@lemmy.worldOP
      link
      fedilink
      arrow-up
      2
      ·
      6 months ago

      There’s no real need for character literals. They would behave exactly the same as string literals but only support a single character. And you can use escape sequences in the string literal, of course.