From 7db2c43fb274dcd1302f10fe20825b27f08ea5be Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Sat, 31 Jul 2021 16:30:56 +0900 Subject: Write terminals to a description file --- grammar/slr.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'grammar/slr.go') diff --git a/grammar/slr.go b/grammar/slr.go index 870e84f..eb74622 100644 --- a/grammar/slr.go +++ b/grammar/slr.go @@ -266,6 +266,26 @@ func (b *slrTableBuilder) writeDescription(w io.Writer) { fmt.Fprintf(w, "no conflicts\n\n") } + fmt.Fprintf(w, "# Terminals\n\n") + + termSyms := b.symTab.terminalSymbols() + + fmt.Fprintf(w, "%v symbols:\n\n", len(termSyms)) + + for _, sym := range termSyms { + text, ok := b.symTab.toText(sym) + if !ok { + text = fmt.Sprintf("", sym) + } + if strings.HasPrefix(text, "_") { + fmt.Fprintf(w, "%4v %v: \"%v\"\n", sym.num(), text, b.sym2AnonPat[sym]) + } else { + fmt.Fprintf(w, "%4v %v\n", sym.num(), text) + } + } + + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, "# Productions\n\n") fmt.Fprintf(w, "%v productions:\n\n", len(b.prods.getAllProductions())) -- cgit v1.2.3