Comments (7)
I feel like it would have to be staged (like you say), but you can parse both with Earley.
from earley.
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.
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.
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.
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.
@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.
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)
- Parsing hangs even for simple ambiguous grammars HOT 2
- list = listLike? HOT 3
- Q: How to do error recovery? HOT 1
- Wrong(?) result on some grammars with infinite results HOT 10
- Is Earley’s implementation related to Marpa? HOT 3
- Add a `eof` terminal HOT 5
- Behavior of Semigroup/Monoid instances for Prod? HOT 5
- Capture result as well as matched tokens HOT 2
- Generate ABNF/EBNF from Earley grammar HOT 1
- Suggestion: Make it so that `<$` rules return at most one result. HOT 3
- Parsing into a list delimited by a token HOT 5
- INDENT and DEDENT HOT 5
- feature: constraint validation of production parse result HOT 7
- Please add tags "test ambiguity" etc HOT 2
- Crashes if grammar is infinitely ambiguous on given input HOT 11
- Is it okey to use "many" and heavily use Applicative parsing techniques? HOT 2
- Diverges with sepEndBy from parser-combinator HOT 1
- Report doesn't include enough information HOT 2
- Is there any possible optimization for getting non-exhaustive outputs for ambiguous grammars HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from earley.