diff options
| author | Ryo Nihei <nihei.dev@gmail.com> | 2021-10-03 00:02:21 +0900 |
|---|---|---|
| committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-10-03 00:02:21 +0900 |
| commit | 60a508960e71c73c5a8b72eb60ab0ac39d4f347d (patch) | |
| tree | 58ed842cff7ac38db43444dbba0a41bff7a8b0ee /cmd | |
| parent | Format the source code of a lexer maleeni-go generates (diff) | |
| download | tre-60a508960e71c73c5a8b72eb60ab0ac39d4f347d.tar.gz tre-60a508960e71c73c5a8b72eb60ab0ac39d4f347d.tar.xz | |
Remove the ModeName and KindName fields from the driver.Token struct
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/maleeni/lex.go | 32 |
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, + }) + } +} |
