summaryrefslogtreecommitdiff
path: root/lang/golang/go.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-10-21 11:20:52 -0400
committerMarc Vertes <mvertes@free.fr>2023-10-21 11:20:52 -0400
commit20d331813cf05f42961f0f6df531c2880f753a07 (patch)
tree409e2b6b358579dd7199947f162d490b7c9ffe08 /lang/golang/go.go
parente7814f9d8c1d062852f5c9a652a1c4eb3335cf04 (diff)
parser: implement operator precedence rules in expressions
Diffstat (limited to 'lang/golang/go.go')
-rw-r--r--lang/golang/go.go31
1 files changed, 18 insertions, 13 deletions
diff --git a/lang/golang/go.go b/lang/golang/go.go
index 7f66594..44cbd3a 100644
--- a/lang/golang/go.go
+++ b/lang/golang/go.go
@@ -70,19 +70,24 @@ var GoSpec = &lang.Spec{
":": {TokenId: lang.Colon},
// Operators
- "&": {TokenId: lang.And},
- "*": {TokenId: lang.Mul},
- "+": {TokenId: lang.Add},
- "-": {TokenId: lang.Sub},
- "=": {TokenId: lang.Assign},
- "<": {TokenId: lang.Less},
- ">": {TokenId: lang.Greater},
- "^": {TokenId: lang.Xor},
+ "&": {TokenId: lang.And, Precedence: 1},
+ "*": {TokenId: lang.Mul, Precedence: 1},
+ "/": {TokenId: lang.Quo, Precedence: 1},
+ "%": {TokenId: lang.Rem, Precedence: 1},
+ "+": {TokenId: lang.Add, Precedence: 2},
+ "-": {TokenId: lang.Sub, Precedence: 2},
+ "=": {TokenId: lang.Assign, Precedence: 6},
+ "+=": {TokenId: lang.AddAssign, Precedence: 6},
+ "<": {TokenId: lang.Less, Precedence: 3},
+ ">": {TokenId: lang.Greater, Precedence: 3},
+ "^": {TokenId: lang.Xor, Precedence: 2},
"~": {TokenId: lang.Tilde},
- ":=": {TokenId: lang.Define},
- "==": {TokenId: lang.Equal},
- "<=": {TokenId: lang.LessEqual},
- ">=": {TokenId: lang.GreaterEqual},
+ "&&": {TokenId: lang.Land, Precedence: 4},
+ "||": {TokenId: lang.Lor, Precedence: 5},
+ ":=": {TokenId: lang.Define, Precedence: 6},
+ "==": {TokenId: lang.Equal, Precedence: 3},
+ "<=": {TokenId: lang.LessEqual, Precedence: 3},
+ ">=": {TokenId: lang.GreaterEqual, Precedence: 3},
"->": {TokenId: lang.Arrow},
"++": {TokenId: lang.Inc, SkipSemi: true},
"--": {TokenId: lang.Dec, SkipSemi: true},
@@ -93,7 +98,7 @@ var GoSpec = &lang.Spec{
"chan": {TokenId: lang.Chan, SkipSemi: true},
"const": {TokenId: lang.Const, SkipSemi: true},
"continue": {TokenId: lang.Continue},
- "default": {TokenId: lang.Default, SkipSemi: true},
+ "default": {TokenId: lang.Case, SkipSemi: true},
"defer": {TokenId: lang.Defer, SkipSemi: true},
"else": {TokenId: lang.Else, SkipSemi: true},
"fallthrough": {TokenId: lang.Fallthrough},