aboutsummaryrefslogtreecommitdiff
path: root/grammar/symbol.go
diff options
context:
space:
mode:
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")