diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-08-29 21:10:42 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-08-29 21:10:42 +0900 |
commit | b70f41840819a59f82a37c0da7eddae40fc52aa0 (patch) | |
tree | f830f25438d089465ce70bec272f1ac2e6f3d03b /grammar/symbol.go | |
parent | Use a pattern string defined by a string literal as its alias (diff) | |
download | urubu-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.go | 14 |
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") |