diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-10-21 11:20:52 -0400 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-10-21 11:20:52 -0400 |
| commit | 20d331813cf05f42961f0f6df531c2880f753a07 (patch) | |
| tree | 409e2b6b358579dd7199947f162d490b7c9ffe08 /lang/golang/go.go | |
| parent | e7814f9d8c1d062852f5c9a652a1c4eb3335cf04 (diff) | |
parser: implement operator precedence rules in expressions
Diffstat (limited to 'lang/golang/go.go')
| -rw-r--r-- | lang/golang/go.go | 31 |
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}, |
