Git Product home page Git Product logo

Comments (7)

sboosali avatar sboosali commented on July 24, 2024

I feel like it would have to be staged (like you say), but you can parse both with Earley.

from earley.

ollef avatar ollef commented on July 24, 2024

Hey Liam!

This is a good question!

Spiros is right. I'll add my experience as well:

Staging seems to be the norm in the languages that I've looked at (GHC has a separate pass to fix-up the operator precedence after parsing, Agda uses parallel parsing combinators to parse mixfix identifiers after having done a "rough parse" with Happy).

Basically you can have a first parsing pass that parses all expressions as e.g. lists of identifiers, but otherwise gives you the rough structure of the file (i.e. grab all declarations as you say), and then when all identifiers are known, do the mixfix parsing.

from earley.

liamoc avatar liamoc commented on July 24, 2024

Thanks for your replies.

Not related to the original question, but I wonder how I could accomplish alignment sensitive parsing with Earley? Presumably I'd have to preprocess somehow. My tricks in parsec here also relied on monadic parsing.

from earley.

liamoc avatar liamoc commented on July 24, 2024

A rough idea would be,

Run a lexer first that annotates each token with its x position, determine each level of alignment used in the program in an initial pass and generate a unique production for each one in the grammar monad. But that sounds very painful.

from earley.

ollef avatar ollef commented on July 24, 2024

Yeah, I think preprocessing could work. One idea that I've seen before that doesn't sound too painful is to insert generated indent and unindent tokens, basically inserting the explicit braces that the indentation "denotes".

If you're doing multi-pass parsing as discussed above, it might also make sense to do the first pass with a monadic parser like Parsec which could then handle indentation.

from earley.

phadej avatar phadej commented on July 24, 2024

@ollef check https://michaeldadams.org/papers/layout_parsing/LayoutParsing.pdf and https://pdfs.semanticscholar.org/cd8e/5faaa60dfa946dd8a79a5917fe52b4bd0346.pdf

My gut feeling is that it won't be too hard to add that to Earley, but it might turn out to be quite intrusive.

from earley.

ollef avatar ollef commented on July 24, 2024

Looks interesting, thanks! I probably won't be adding anything like that in the foreseeable future, but contributions would be welcome. :)

from earley.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.