diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-07-10 15:54:13 +0200 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-07-10 15:54:13 +0200 |
| commit | 80c277773a1e73267832641574654361b85e6028 (patch) | |
| tree | c39b422716e41e47987b62cdc4a9dd2649cc2138 /lang/golang/go.go | |
first commit
Diffstat (limited to 'lang/golang/go.go')
| -rw-r--r-- | lang/golang/go.go | 90 |
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}, + }, +} |
