summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-11-20 15:54:52 +0100
committerMarc Vertes <mvertes@free.fr>2023-11-20 15:54:52 +0100
commit6a0490257bf235d011004bc303306f617ac6ea31 (patch)
treee04160a26f78afaa60c4b18b3b16662d35106d97 /lang
parent001ca51323a1a54c9b3db377f0783c330666c480 (diff)
parser: add support for unary operators
Diffstat (limited to 'lang')
-rw-r--r--lang/golang/go.go1
-rw-r--r--lang/token.go10
2 files changed, 11 insertions, 0 deletions
diff --git a/lang/golang/go.go b/lang/golang/go.go
index 26af4f3..f5a6578 100644
--- a/lang/golang/go.go
+++ b/lang/golang/go.go
@@ -91,6 +91,7 @@ var GoSpec = &lang.Spec{
"<=": {TokenId: lang.LessEqual, Precedence: 3},
">=": {TokenId: lang.GreaterEqual, Precedence: 3},
"->": {TokenId: lang.Arrow},
+ "!": {TokenId: lang.Not},
"++": {TokenId: lang.Inc, SkipSemi: true},
"--": {TokenId: lang.Dec, SkipSemi: true},
diff --git a/lang/token.go b/lang/token.go
index a894c98..4bf9bf2 100644
--- a/lang/token.go
+++ b/lang/token.go
@@ -116,6 +116,16 @@ const (
EqualSet
)
+var UnaryOp = map[TokenId]TokenId{
+ Add: Plus, // +
+ And: Address, // &
+ Not: Not, // !
+ Mul: Deref, // *
+ Sub: Minus, // -
+ Tilde: Tilde, // ~
+ Xor: BitComp, // ^
+}
+
func (t TokenId) IsKeyword() bool { return t >= Break && t <= Var }
func (t TokenId) IsLiteral() bool { return t >= Char && t <= String }
func (t TokenId) IsOperator() bool { return t >= Add && t <= Tilde }