aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/maleeni/lex.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/cmd/maleeni/lex.go b/cmd/maleeni/lex.go
index 7bc7126..37d7d71 100644
--- a/cmd/maleeni/lex.go
+++ b/cmd/maleeni/lex.go
@@ -67,12 +67,14 @@ func runLex(cmd *cobra.Command, args []string) (retErr error) {
defer f.Close()
w = f
}
+
+ tok2JSON := genTokenJSONMarshaler(clspec)
for {
tok, err := lex.Next()
if err != nil {
return err
}
- data, err := json.Marshal(tok)
+ data, err := tok2JSON(tok)
if err != nil {
return fmt.Errorf("failed to marshal a token; token: %v, error: %v\n", tok, err)
}
@@ -104,3 +106,31 @@ func readCompiledLexSpec(path string) (*spec.CompiledLexSpec, error) {
}
return clspec, nil
}
+
+func genTokenJSONMarshaler(clspec *spec.CompiledLexSpec) func(tok *driver.Token) ([]byte, error) {
+ return func(tok *driver.Token) ([]byte, error) {
+ return json.Marshal(struct {
+ ModeID int `json:"mode_id"`
+ ModeName string `json:"mode_name"`
+ KindID int `json:"kind_id"`
+ ModeKindID int `json:"mode_kind_id"`
+ KindName string `json:"kind_name"`
+ Row int `json:"row"`
+ Col int `json:"col"`
+ Lexeme string `json:"lexeme"`
+ EOF bool `json:"eof"`
+ Invalid bool `json:"invalid"`
+ }{
+ ModeID: tok.ModeID.Int(),
+ ModeName: clspec.ModeNames[tok.ModeID].String(),
+ KindID: tok.KindID.Int(),
+ ModeKindID: tok.ModeKindID.Int(),
+ KindName: clspec.KindNames[tok.KindID].String(),
+ Row: tok.Row,
+ Col: tok.Col,
+ Lexeme: string(tok.Lexeme),
+ EOF: tok.EOF,
+ Invalid: tok.Invalid,
+ })
+ }
+}