summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
Diffstat (limited to 'lang')
-rw-r--r--lang/golang/go.go90
1 files changed, 90 insertions, 0 deletions
diff --git a/lang/golang/go.go b/lang/golang/go.go
new file mode 100644
index 0000000..cc13a24
--- /dev/null
+++ b/lang/golang/go.go
@@ -0,0 +1,90 @@
+package golang
+
+import (
+ "github.com/gnolang/parscan/parser"
+ "github.com/gnolang/parscan/scanner"
+)
+
+var GoScanner = &scanner.Scanner{
+ CharProp: [scanner.ASCIILen]uint{
+ '\t': scanner.CharSep,
+ '\n': scanner.CharLineSep,
+ ' ': scanner.CharSep,
+ '!': scanner.CharOp,
+ '"': scanner.CharStr,
+ '%': scanner.CharOp,
+ '&': scanner.CharOp,
+ '\'': scanner.CharStr,
+ '(': scanner.CharBlock,
+ '*': scanner.CharOp,
+ '+': scanner.CharOp,
+ ',': scanner.CharGroupSep,
+ '-': scanner.CharOp,
+ '.': scanner.CharOp,
+ '/': scanner.CharOp,
+ ':': scanner.CharOp,
+ ';': scanner.CharGroupSep,
+ '<': scanner.CharOp,
+ '=': scanner.CharOp,
+ '>': scanner.CharOp,
+ '[': scanner.CharBlock,
+ '^': scanner.CharOp,
+ '{': scanner.CharBlock,
+ '|': scanner.CharOp,
+ '~': scanner.CharOp,
+ },
+ End: map[string]string{
+ "(": ")",
+ "{": "}",
+ "[": "]",
+ "/*": "*/",
+ `"`: `"`,
+ "'": "'",
+ "`": "`",
+ "//": "\n",
+ },
+}
+
+const (
+ Undefined = parser.Kind(iota)
+ FuncDecl
+ CallExpr
+ IfStmt
+ StmtBloc
+ ReturnStmt
+ Ident
+ StringLit
+ NumberLit
+ ParBloc
+ DotOp
+ MulOp
+ AddOp
+ SubOp
+ AssignOp
+ DefOp
+ InfOp
+)
+
+var GoParser = &parser.Parser{
+ Scanner: GoScanner,
+ Spec: map[string]parser.NodeSpec{
+ ".": {DotOp, parser.Call, 3},
+ "*": {MulOp, 0, 4},
+ "+": {AddOp, 0, 5},
+ "-": {SubOp, 0, 5},
+ "<": {InfOp, 0, 6},
+ ":=": {DefOp, 0, 7},
+ "=": {AssignOp, 0, 7},
+ "#call": {CallExpr, 0, 0},
+ "#id": {Ident, 0, 0},
+ "#num": {NumberLit, 0, 0},
+ "if": {IfStmt, parser.Stmt | parser.ExprSep, 0},
+ "func": {FuncDecl, parser.Decl | parser.Call, 0},
+ "return": {ReturnStmt, parser.Stmt, 0},
+ "{..}": {StmtBloc, parser.ExprSep, 0},
+ "{": {StmtBloc, parser.ExprSep, 0}, // FIXME: redundant with above
+ "(..)": {ParBloc, parser.Call, 0},
+ "(": {ParBloc, parser.Call, 0}, // FIXME: redundant with above
+ `".."`: {StringLit, 0, 0},
+ },
+}