diff options
Diffstat (limited to 'driver')
-rw-r--r-- | driver/parser.go | 2 | ||||
-rw-r--r-- | driver/parser_test.go | 24 | ||||
-rw-r--r-- | driver/semantic_action.go | 4 | ||||
-rw-r--r-- | driver/semantic_action_test.go | 5 |
4 files changed, 18 insertions, 17 deletions
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)) } } |