-
Notifications
You must be signed in to change notification settings - Fork 0
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
_NAME, _CALL, _GOTO (and/or: _DEF, _USE, ...) #15
Comments
This was referenced Sep 6, 2023
xparq
added a commit
that referenced
this issue
Sep 6, 2023
Nested structures like { some = code; { block; {another} stuff} yay } can be parsed now recursively. + Rule tree: name lookup for _USE (no generic find() yet) + #14: Recursion is implemented, but not via _SELF yet + #15 (_DEF/_USE) + #28: Parser::run() added + OPERATORS -> CONST_OPERATORS, preparing to taking it seriously (RULE.name is mutable though, for _DEF to still work on const rules, but that's a tmp. kludge!) + Fix #29: Crash in _DEF for missing len = 0 + Better diagnostics (tests, debug messages etc.) + Comments, cosmetics
xparq
added a commit
that referenced
this issue
Sep 6, 2023
Nested structures like { some = code; { block; {another} stuff} yay } can be parsed now with (almost) the ususal recursive grammar productions. + Rule tree: name lookup for _USE (no generic find() yet) + #14: Recursion is implemented, but not via _SELF yet + #15 (_DEF/_USE) + #28: Parser::run() added + OPERATORS -> CONST_OPERATORS, preparing to taking it seriously (RULE.name is mutable though, for _DEF to still work on const rules, but that's a tmp. kludge!) + Fix #29: Crash in _DEF for missing len = 0 + Better diagnostics (tests, debug messages etc.) + Comments, cosmetics
xparq
added a commit
that referenced
this issue
Sep 6, 2023
Nested structures like { some = code; { block; {another} stuff} yay } can be parsed now with (almost) the ususal recursive grammar productions. + Rule tree: name lookup for _USE (no generic find() yet) + #14: Recursion is implemented, but not via _SELF yet + #15 (_DEF/_USE) + #28: Parser::run() added + OPERATORS -> CONST_OPERATORS, preparing to taking it seriously (RULE.name is mutable though, for _DEF to still work on const rules, but that's a tmp. kludge!) + Fix #29: Crash in _DEF for missing len = 0 + Better diagnostics (tests, debug messages etc.) + Comments, cosmetics
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Well, to avoid the brittle address-tracking horror of #16, a named rule can't pre-register it's
this
address at construction time, where things are in flux.At runtime, though:
the first time the engine sees a name, it can safely remember its address. (Well, its parent's address, technically, as a _NAME opcode "rule" is always in the PROD of some owner rule -- the real one that the name belongs to.)
_DEF "name"
and_USE "name"
have now been implemented, doing just that (72e4508).or, if the first time it sees a branch OP (or other reference to a name), and it can't find it in the name->rule lookup table, it does a full search and updates the table. (Or errs out.)
This would also require a preprocessing/compilation stage over the grammar. (It's fully interpreted yet.) -> Grammar preprocessing/compilation phase (after construction, before parsing) #31
Make a distinction between
NAME
andLABEL
!... Name should really just be the name of a rule... err... but should it also be anID
then?... AndLABEL
is really any branching (GOTO/CALL) destination... Branching can apply to both names and labels, but not all labels are names! Labels should probably be more indirect, and also support positions (slots) as branching targets, where the actual rule can get replaced by another (independent of those rules' own name/identity)!So, labels are a subset of names. Every name can be used as a label, but labels can't always be used as names.
The text was updated successfully, but these errors were encountered: