From 1d0a67bb7e95038f97e5a6c66bd2705d65f0ab57 Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Wed, 27 Oct 2021 22:21:39 +0900 Subject: [PATCH] Use maleeni v0.5.1 --- cmd/vartan/parse.go | 5 +++-- driver/parser.go | 2 +- driver/parser_test.go | 24 ++++++++++++------------ driver/semantic_action.go | 4 ++-- driver/semantic_action_test.go | 5 +++-- go.mod | 2 +- go.sum | 4 ++-- grammar/grammar.go | 5 ++++- 8 files changed, 28 insertions(+), 23 deletions(-) diff --git a/cmd/vartan/parse.go b/cmd/vartan/parse.go index c370c15..7cf3c81 100644 --- a/cmd/vartan/parse.go +++ b/cmd/vartan/parse.go @@ -118,9 +118,10 @@ func runParse(cmd *cobra.Command, args []string) (retErr error) { case tok.EOF: msg = "" case tok.Invalid: - msg = fmt.Sprintf("'%v' ()", tok.Text()) + msg = fmt.Sprintf("'%v' ()", string(tok.Lexeme)) default: - msg = fmt.Sprintf("'%v' (%v)", tok.Text(), tok.KindName) + k := cgram.LexicalSpecification.Maleeni.Spec.KindNames[tok.KindID] + msg = fmt.Sprintf("'%v' (%v)", string(tok.Lexeme), k) } fmt.Fprintf(os.Stderr, "%v:%v: %v: %v", synErr.Row+1, synErr.Col+1, synErr.Message, msg) diff --git a/driver/parser.go b/driver/parser.go index c9b6229..6a62554 100644 --- a/driver/parser.go +++ b/driver/parser.go @@ -45,7 +45,7 @@ type Parser struct { } func NewParser(gram *spec.CompiledGrammar, src io.Reader, opts ...ParserOption) (*Parser, error) { - lex, err := mldriver.NewLexer(gram.LexicalSpecification.Maleeni.Spec, src) + lex, err := mldriver.NewLexer(mldriver.NewLexSpec(gram.LexicalSpecification.Maleeni.Spec), src) if err != nil { return nil, err } diff --git a/driver/parser_test.go b/driver/parser_test.go index 0fad19f..af3e9a1 100644 --- a/driver/parser_test.go +++ b/driver/parser_test.go @@ -55,7 +55,7 @@ id: "[A-Za-z_][0-9A-Za-z_]*"; nonTermNode("term", nonTermNode("term", nonTermNode("factor", - termNode("__3__", "("), + termNode("x_3", "("), nonTermNode("expr", nonTermNode("expr", nonTermNode("term", @@ -64,10 +64,10 @@ id: "[A-Za-z_][0-9A-Za-z_]*"; ), ), ), - termNode("__1__", "+"), + termNode("x_1", "+"), nonTermNode("term", nonTermNode("factor", - termNode("__3__", "("), + termNode("x_3", "("), nonTermNode("expr", nonTermNode("expr", nonTermNode("term", @@ -76,27 +76,27 @@ id: "[A-Za-z_][0-9A-Za-z_]*"; ), ), ), - termNode("__1__", "+"), + termNode("x_1", "+"), nonTermNode("term", nonTermNode("factor", termNode("id", "c"), ), ), ), - termNode("__4__", ")"), + termNode("x_4", ")"), ), ), ), - termNode("__4__", ")"), + termNode("x_4", ")"), ), ), - termNode("__2__", "*"), + termNode("x_2", "*"), nonTermNode("factor", termNode("id", "d"), ), ), ), - termNode("__1__", "+"), + termNode("x_1", "+"), nonTermNode("term", nonTermNode("factor", termNode("id", "e"), @@ -272,19 +272,19 @@ id: "[A-Za-z]+"; `, src: `[Byers, Frohike, Langly]`, cst: nonTermNode("list", - termNode("__1__", "["), + termNode("x_1", "["), nonTermNode("elems", nonTermNode("elems", nonTermNode("elems", termNode("id", "Byers"), ), - termNode("__3__", ","), + termNode("x_3", ","), termNode("id", "Frohike"), ), - termNode("__3__", ","), + termNode("x_3", ","), termNode("id", "Langly"), ), - termNode("__2__", "]"), + termNode("x_2", "]"), ), ast: nonTermNode("list", termNode("id", "Byers"), diff --git a/driver/semantic_action.go b/driver/semantic_action.go index 1db703b..8bcbd22 100644 --- a/driver/semantic_action.go +++ b/driver/semantic_action.go @@ -103,7 +103,7 @@ func (a *SyntaxTreeActionSet) Shift(tok *mldriver.Token, recovered bool) { if a.makeAST { ast = &Node{ KindName: a.gram.ParsingTable.Terminals[term], - Text: tok.Text(), + Text: string(tok.Lexeme), Row: tok.Row, Col: tok.Col, } @@ -111,7 +111,7 @@ func (a *SyntaxTreeActionSet) Shift(tok *mldriver.Token, recovered bool) { if a.makeCST { cst = &Node{ KindName: a.gram.ParsingTable.Terminals[term], - Text: tok.Text(), + Text: string(tok.Lexeme), Row: tok.Row, Col: tok.Col, } diff --git a/driver/semantic_action_test.go b/driver/semantic_action_test.go index 1d785e4..889016b 100644 --- a/driver/semantic_action_test.go +++ b/driver/semantic_action_test.go @@ -16,10 +16,11 @@ type testSemAct struct { } func (a *testSemAct) Shift(tok *mldriver.Token, recovered bool) { + k := a.gram.LexicalSpecification.Maleeni.Spec.KindNames[tok.KindID] if recovered { - a.actLog = append(a.actLog, fmt.Sprintf("shift/%v/recovered", tok.KindName)) + a.actLog = append(a.actLog, fmt.Sprintf("shift/%v/recovered", k)) } else { - a.actLog = append(a.actLog, fmt.Sprintf("shift/%v", tok.KindName)) + a.actLog = append(a.actLog, fmt.Sprintf("shift/%v", k)) } } diff --git a/go.mod b/go.mod index 003e9d0..0ffb9c8 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,6 @@ module github.com/nihei9/vartan go 1.16 require ( - github.com/nihei9/maleeni v0.4.0 + github.com/nihei9/maleeni v0.5.1 github.com/spf13/cobra v1.1.3 ) diff --git a/go.sum b/go.sum index 46b065f..1552208 100644 --- a/go.sum +++ b/go.sum @@ -118,8 +118,8 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nihei9/maleeni v0.4.0 h1:ca1V9U7lZuf5c01Ls4HqlYf7eyhDWdGBv+uyBkChdf0= -github.com/nihei9/maleeni v0.4.0/go.mod h1:d5x5jHHuema6IUi+aDPczMZQ4AlNokcKbEgB5T+70dI= +github.com/nihei9/maleeni v0.5.1 h1:/w5fT7rYpiOdYZ86OCf+V0FX7mNlEwOKYoDMA2igxJU= +github.com/nihei9/maleeni v0.5.1/go.mod h1:d5x5jHHuema6IUi+aDPczMZQ4AlNokcKbEgB5T+70dI= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= diff --git a/grammar/grammar.go b/grammar/grammar.go index 1080e53..39a10a8 100644 --- a/grammar/grammar.go +++ b/grammar/grammar.go @@ -167,6 +167,9 @@ func (b *GrammarBuilder) Build() (*Grammar, error) { return nil, b.errs } + // FIXME + symTabAndLexSpec.lexSpec.Name = "lex" + return &Grammar{ lexSpec: symTabAndLexSpec.lexSpec, skipLexKinds: symTabAndLexSpec.skip, @@ -336,7 +339,7 @@ func (b *GrammarBuilder) genSymbolTableAndLexSpec(root *spec.RootNode) (*symbolT } for i, p := range anonPats { - kind := fmt.Sprintf("__%v__", i+1) + kind := fmt.Sprintf("x_%v", i+1) sym, err := symTab.registerTerminalSymbol(kind) if err != nil {