modifing binding power of the unary "plus" and "dash"#3
Open
table-harmony wants to merge 1 commit intotlaceby:mainfrom
Open
modifing binding power of the unary "plus" and "dash"#3table-harmony wants to merge 1 commit intotlaceby:mainfrom
table-harmony wants to merge 1 commit intotlaceby:mainfrom
Conversation
skandragon
reviewed
Jun 24, 2025
|
|
||
| // Unary/Prefix | ||
| nud(lexer.TYPEOF, unary, parse_prefix_expr) | ||
| nud(lexer.DASH, unary, parse_prefix_expr) |
There was a problem hiding this comment.
I don't think this has an actual effect.
The nud function looks like this:
func nud (kind lexer.TokenKind, bp binding_power, nud_fn nud_handler) {
bp_lu[kind] = primary
nud_lu[kind] = nud_fn
}While it takes in a binding power, it doesn't use it.
I came here to see what the resulting code was, but while the video removed that param, the code here still has it, but it doesn't do anything from what I can see.
That said, this errors out:
stmt := `45.2 + 5 * 4 - -5;`
I'm not sure of the fix yet.
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.


Sense the binding power of the prefix "dash" was unary, it was above the binding power of multiplicative.

Therefore it would have higher precedence: 10 * 10 - 10, for this case the dash would be parsed as a unary and not the correct additive.
As you can see the binary expression is parsed as a left for 10 and a right for the binary expression 10 - 10 which is wrong.
That is way in this commit I have changed the binding power of the token "dash" and added the token "plus" as prefix operations such as +10, -10 and modified their binding power to additive sense a "dash" prefix is identical to 0 - 10 and therefore should be parsed with the binding power of additive