aboutsummaryrefslogtreecommitdiff
path: root/grammar/symbol.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2021-08-29 21:10:42 +0900
committerRyo Nihei <nihei.dev@gmail.com>2021-08-29 21:10:42 +0900
commitb70f41840819a59f82a37c0da7eddae40fc52aa0 (patch)
treef830f25438d089465ce70bec272f1ac2e6f3d03b /grammar/symbol.go
parentUse a pattern string defined by a string literal as its alias (diff)
downloadurubu-b70f41840819a59f82a37c0da7eddae40fc52aa0.tar.gz
urubu-b70f41840819a59f82a37c0da7eddae40fc52aa0.tar.xz
Add describe command to print a description file
Diffstat (limited to 'grammar/symbol.go')
-rw-r--r--grammar/symbol.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/grammar/symbol.go b/grammar/symbol.go
index 136e909..3a7dfb6 100644
--- a/grammar/symbol.go
+++ b/grammar/symbol.go
@@ -249,6 +249,20 @@ func (t *symbolTable) terminalTexts() ([]string, error) {
return t.termTexts, nil
}
+func (t *symbolTable) nonTerminalSymbols() []symbol {
+ syms := make([]symbol, 0, t.nonTermNum.Int()-nonTerminalNumMin.Int())
+ for sym := range t.sym2Text {
+ if !sym.isNonTerminal() || sym.isNil() {
+ continue
+ }
+ syms = append(syms, sym)
+ }
+ sort.Slice(syms, func(i, j int) bool {
+ return syms[i] < syms[j]
+ })
+ return syms
+}
+
func (t *symbolTable) nonTerminalTexts() ([]string, error) {
if t.nonTermNum == nonTerminalNumMin || t.nonTermTexts[symbolStart.num().Int()] == "" {
return nil, fmt.Errorf("symbol table has no terminals or no start symbol")