summaryrefslogtreecommitdiff
path: root/lang/golang/go.go
diff options
context:
space:
mode:
Diffstat (limited to 'lang/golang/go.go')
-rw-r--r--lang/golang/go.go122
1 files changed, 62 insertions, 60 deletions
diff --git a/lang/golang/go.go b/lang/golang/go.go
index 5b0ffa6..47baee2 100644
--- a/lang/golang/go.go
+++ b/lang/golang/go.go
@@ -1,7 +1,9 @@
+// Package golang provides the lexical specification of Go language.
package golang
import "github.com/mvertes/parscan/lang"
+// GoSpec contains the lexical specification of Go.
var GoSpec = &lang.Spec{
CharProp: [lang.ASCIILen]uint{
'\t': lang.CharSep,
@@ -53,73 +55,73 @@ var GoSpec = &lang.Spec{
},
TokenProps: map[string]lang.TokenProp{
// Block tokens (can be nested)
- "{..}": {TokenId: lang.BraceBlock},
- "[..]": {TokenId: lang.BracketBlock},
- "(..)": {TokenId: lang.ParenBlock},
+ "{..}": {Token: lang.BraceBlock},
+ "[..]": {Token: lang.BracketBlock},
+ "(..)": {Token: lang.ParenBlock},
// String tokens (not nested)
- "//..": {TokenId: lang.Comment},
- "/*..": {TokenId: lang.Comment},
- `".."`: {TokenId: lang.String},
- "`..`": {TokenId: lang.String},
+ "//..": {Token: lang.Comment},
+ "/*..": {Token: lang.Comment},
+ `".."`: {Token: lang.String},
+ "`..`": {Token: lang.String},
// Separators
- ",": {TokenId: lang.Comma},
- ";": {TokenId: lang.Semicolon},
- ".": {TokenId: lang.Period},
- ":": {TokenId: lang.Colon},
+ ",": {Token: lang.Comma},
+ ";": {Token: lang.Semicolon},
+ ".": {Token: lang.Period},
+ ":": {Token: lang.Colon},
// Operators
- "&": {TokenId: lang.And, Precedence: 1},
- "*": {TokenId: lang.Mul, Precedence: 1},
- "/": {TokenId: lang.Quo, Precedence: 1},
- "%": {TokenId: lang.Rem, Precedence: 1},
- "<<": {TokenId: lang.Shl, Precedence: 1},
- ">>": {TokenId: lang.Shr, 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.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.Not},
- "++": {TokenId: lang.Inc, SkipSemi: true},
- "--": {TokenId: lang.Dec, SkipSemi: true},
+ "&": {Token: lang.And, Precedence: 1},
+ "*": {Token: lang.Mul, Precedence: 1},
+ "/": {Token: lang.Quo, Precedence: 1},
+ "%": {Token: lang.Rem, Precedence: 1},
+ "<<": {Token: lang.Shl, Precedence: 1},
+ ">>": {Token: lang.Shr, Precedence: 1},
+ "+": {Token: lang.Add, Precedence: 2},
+ "-": {Token: lang.Sub, Precedence: 2},
+ "=": {Token: lang.Assign, Precedence: 6},
+ "+=": {Token: lang.AddAssign, Precedence: 6},
+ "<": {Token: lang.Less, Precedence: 3},
+ ">": {Token: lang.Greater, Precedence: 3},
+ "^": {Token: lang.Xor, Precedence: 2},
+ "~": {Token: lang.Tilde},
+ "&&": {Token: lang.Land, Precedence: 4},
+ "||": {Token: lang.Lor, Precedence: 5},
+ ":=": {Token: lang.Define, Precedence: 6},
+ "==": {Token: lang.Equal, Precedence: 3},
+ "<=": {Token: lang.LessEqual, Precedence: 3},
+ ">=": {Token: lang.GreaterEqual, Precedence: 3},
+ "->": {Token: lang.Arrow},
+ "!": {Token: lang.Not},
+ "++": {Token: lang.Inc, SkipSemi: true},
+ "--": {Token: lang.Dec, SkipSemi: true},
// Reserved keywords
- "break": {TokenId: lang.Break},
- "case": {TokenId: lang.Case, SkipSemi: true},
- "chan": {TokenId: lang.Chan, SkipSemi: true},
- "const": {TokenId: lang.Const, SkipSemi: true},
- "continue": {TokenId: lang.Continue},
- "default": {TokenId: lang.Case, SkipSemi: true},
- "defer": {TokenId: lang.Defer, SkipSemi: true},
- "else": {TokenId: lang.Else, SkipSemi: true},
- "fallthrough": {TokenId: lang.Fallthrough},
- "for": {TokenId: lang.For, SkipSemi: true},
- "func": {TokenId: lang.Func, SkipSemi: true},
- "go": {TokenId: lang.Go, SkipSemi: true},
- "goto": {TokenId: lang.Goto, SkipSemi: true},
- "if": {TokenId: lang.If, SkipSemi: true},
- "import": {TokenId: lang.Import, SkipSemi: true},
- "interface": {TokenId: lang.Interface, SkipSemi: true},
- "map": {TokenId: lang.Map, SkipSemi: true},
- "package": {TokenId: lang.Package, SkipSemi: true},
- "range": {TokenId: lang.Range, SkipSemi: true},
- "return": {TokenId: lang.Return},
- "select": {TokenId: lang.Select, SkipSemi: true},
- "struct": {TokenId: lang.Struct, SkipSemi: true},
- "switch": {TokenId: lang.Switch, SkipSemi: true},
- "type": {TokenId: lang.Type, SkipSemi: true},
- "var": {TokenId: lang.Var, SkipSemi: true},
+ "break": {Token: lang.Break},
+ "case": {Token: lang.Case, SkipSemi: true},
+ "chan": {Token: lang.Chan, SkipSemi: true},
+ "const": {Token: lang.Const, SkipSemi: true},
+ "continue": {Token: lang.Continue},
+ "default": {Token: lang.Case, SkipSemi: true},
+ "defer": {Token: lang.Defer, SkipSemi: true},
+ "else": {Token: lang.Else, SkipSemi: true},
+ "fallthrough": {Token: lang.Fallthrough},
+ "for": {Token: lang.For, SkipSemi: true},
+ "func": {Token: lang.Func, SkipSemi: true},
+ "go": {Token: lang.Go, SkipSemi: true},
+ "goto": {Token: lang.Goto, SkipSemi: true},
+ "if": {Token: lang.If, SkipSemi: true},
+ "import": {Token: lang.Import, SkipSemi: true},
+ "interface": {Token: lang.Interface, SkipSemi: true},
+ "map": {Token: lang.Map, SkipSemi: true},
+ "package": {Token: lang.Package, SkipSemi: true},
+ "range": {Token: lang.Range, SkipSemi: true},
+ "return": {Token: lang.Return},
+ "select": {Token: lang.Select, SkipSemi: true},
+ "struct": {Token: lang.Struct, SkipSemi: true},
+ "switch": {Token: lang.Switch, SkipSemi: true},
+ "type": {Token: lang.Type, SkipSemi: true},
+ "var": {Token: lang.Var, SkipSemi: true},
},
}