-
Notifications
You must be signed in to change notification settings - Fork 93
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC007] Migrate the parser to the new AST #2083
Draft
yannham
wants to merge
18
commits into
master
Choose a base branch
from
rfc007/parsing
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
+2,709
−1,721
Commits on Nov 21, 2024
-
Improve record representation in the new AST
Instead of elaborating piecewise definitions (such as `{foo.bar = 1, foo.baz = 2}`) directly at the parsing stage, this commit makes the new AST closer to the source language by making record a list of field definition, where the field "name" can be a sequence of identifiers and strings. This representation is used internally by the parser; we now make it the default in the AST, such that the migration of the parser won't have to do this elaboration at all. The elaboration is offloaded to the conversion to `RichTerm`, which happens in the `ast::compat` module. This makes the AST closer to the source language. The first motivation is that it'll be better for the LSP, where some open issues on the tracker are caused by the inability to trace what the LSP get back to the original piecewise definitions. The second reason is that we can't actually elaborate a piecewise definition while staying in the new AST correctly as of today: the new AST only has one record variant, which is recursive by default, but this doesn't match the way recursion and scoping work for piecewise definition. For example, `{foo.bar = 1, baz.foo = foo + 1}` works fine in today's Nickel (evaluate to `{foo = {bar = 1}, baz {foo = 2}}`), but if we elaborate it in the new AST naively, we'll get an infinite recursion: `{foo = {bar = 1}, baz = {foo = foo + 1}}`. Mailine Nickel currently uses a non recursive `Record` for that, but we don't want to introduce such "runtime dictionary" in the new AST as they can't be expressed in the source language. Instead, we rather keep record as defined piecewise and will do further elaboration when needed, during typechecking, future compilation, or in the meantime when converting the new AST representation to mainline Nickel.
Configuration menu - View commit details
-
Copy full SHA for 7d86368 - Browse repository at this point
Copy the full SHA 7d86368View commit details -
Switch to the new AST repr for parser - part I
First stab at making the parser compatible with the new AST representation (`bytecode::ast::Ast`). This is a heavy refactoring which required to update most of `parser::uniterm` and `parser::utils` as well as `grammar.lalrpop`. The current version is far from compiling; fixing compiler errors is planned in follow-up work.
Configuration menu - View commit details
-
Copy full SHA for bc7387d - Browse repository at this point
Copy the full SHA bc7387dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 4f08a58 - Browse repository at this point
Copy the full SHA 4f08a58View commit details -
Configuration menu - View commit details
-
Copy full SHA for de5e9f4 - Browse repository at this point
Copy the full SHA de5e9f4View commit details -
Remove bytecode-experimental feature
As we move toward a bytecode compiler and a bytecode virtual machine, we are replacing the left part of the pipeline with the new AST representation. The bytecode module was previously gated by an experimental feature, thea idea being that this feature would enable the whole bytcode compiler pipeline. However, for now, we only have a new AST representation, and it's being used in the mainline Nickel parser (and soon, in the typechecker, etc.). Thus we need access to the new AST representation by default, and it doesn't make much sense to gate it behind a feature. We'll reintroduce the feature once we have a prototype compiler and a bytecode virtual machine, when it will then make sense to use the feature to toggle between the legacy tree-walking interpreter and the new bytecode compiler.
Configuration menu - View commit details
-
Copy full SHA for 426a11d - Browse repository at this point
Copy the full SHA 426a11dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 3af6e10 - Browse repository at this point
Copy the full SHA 3af6e10View commit details -
Revert to the previous handling of last fields (might need conflict r…
…esolution for RepeatSep1)
Configuration menu - View commit details
-
Copy full SHA for e751489 - Browse repository at this point
Copy the full SHA e751489View commit details -
Configuration menu - View commit details
-
Copy full SHA for 2324c35 - Browse repository at this point
Copy the full SHA 2324c35View commit details -
Configuration menu - View commit details
-
Copy full SHA for 6b0426d - Browse repository at this point
Copy the full SHA 6b0426dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 77db0bf - Browse repository at this point
Copy the full SHA 77db0bfView commit details -
Configuration menu - View commit details
-
Copy full SHA for 4059bca - Browse repository at this point
Copy the full SHA 4059bcaView commit details -
Configuration menu - View commit details
-
Copy full SHA for f7d0403 - Browse repository at this point
Copy the full SHA f7d0403View commit details -
Configuration menu - View commit details
-
Copy full SHA for 1f7dbe1 - Browse repository at this point
Copy the full SHA 1f7dbe1View commit details -
Configuration menu - View commit details
-
Copy full SHA for 751165d - Browse repository at this point
Copy the full SHA 751165dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 2259027 - Browse repository at this point
Copy the full SHA 2259027View commit details -
Configuration menu - View commit details
-
Copy full SHA for d6e3573 - Browse repository at this point
Copy the full SHA d6e3573View commit details -
Configuration menu - View commit details
-
Copy full SHA for 4fe9aea - Browse repository at this point
Copy the full SHA 4fe9aeaView commit details -
Configuration menu - View commit details
-
Copy full SHA for a394c35 - Browse repository at this point
Copy the full SHA a394c35View commit details
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.