diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-07-31 16:30:56 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-07-31 16:30:56 +0900 |
commit | 7db2c43fb274dcd1302f10fe20825b27f08ea5be (patch) | |
tree | 27c3a2bf2de6c0793a841682d4e33875d8e570bc /grammar/slr.go | |
parent | Detect duplicate names between terminals and non-terminals (diff) | |
download | urubu-7db2c43fb274dcd1302f10fe20825b27f08ea5be.tar.gz urubu-7db2c43fb274dcd1302f10fe20825b27f08ea5be.tar.xz |
Write terminals to a description file
Diffstat (limited to 'grammar/slr.go')
-rw-r--r-- | grammar/slr.go | 20 |
1 files changed, 20 insertions, 0 deletions
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("<symbol not found: %v>", 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())) |