aboutsummaryrefslogtreecommitdiff
path: root/grammar/parsing_table.go
diff options
context:
space:
mode:
Diffstat (limited to 'grammar/parsing_table.go')
-rw-r--r--grammar/parsing_table.go29
1 files changed, 5 insertions, 24 deletions
diff --git a/grammar/parsing_table.go b/grammar/parsing_table.go
index a82ef60..aa88ad5 100644
--- a/grammar/parsing_table.go
+++ b/grammar/parsing_table.go
@@ -97,12 +97,11 @@ var (
)
type ParsingTable struct {
- actionTable []actionEntry
- goToTable []goToEntry
- stateCount int
- terminalCount int
- nonTerminalCount int
- expectedTerminals [][]int
+ actionTable []actionEntry
+ goToTable []goToEntry
+ stateCount int
+ terminalCount int
+ nonTerminalCount int
// errorTrapperStates's index means a state number, and when `errorTrapperStates[stateNum]` is `1`,
// the state has an item having the following form. The `α` and `β` can be empty.
@@ -158,7 +157,6 @@ func (b *lrTableBuilder) build() (*ParsingTable, error) {
stateCount: len(b.automaton.states),
terminalCount: b.termCount,
nonTerminalCount: b.nonTermCount,
- expectedTerminals: make([][]int, len(b.automaton.states)),
errorTrapperStates: make([]int, len(b.automaton.states)),
InitialState: initialState.num,
}
@@ -169,12 +167,9 @@ func (b *lrTableBuilder) build() (*ParsingTable, error) {
ptab.errorTrapperStates[state.num] = 1
}
- eTerms := map[int]struct{}{}
-
for sym, kID := range state.next {
nextState := b.automaton.states[kID]
if sym.isTerminal() {
- eTerms[sym.num().Int()] = struct{}{}
b.writeShiftAction(ptab, state.num, sym, nextState.num)
} else {
ptab.writeGoTo(state.num, sym, nextState.num)
@@ -211,23 +206,9 @@ func (b *lrTableBuilder) build() (*ParsingTable, error) {
}
for a := range reducibleItem.lookAhead.symbols {
- eTerms[a.num().Int()] = struct{}{}
b.writeReduceAction(ptab, state.num, a, reducibleProd.num)
}
}
-
- ts := make([]int, len(eTerms))
- {
- i := 0
- for t := range eTerms {
- ts[i] = t
- i++
- }
- sort.Slice(ts, func(i, j int) bool {
- return ts[i] < ts[j]
- })
- }
- ptab.expectedTerminals[state.num] = ts
}
return ptab, nil