Skip to content

Commit be54aed

Browse files
committed
Fix the semantics of mask generation.
We should be doing lookahead of zero and one token, not one and two. See paper, sec. 4.5
1 parent aba7205 commit be54aed

1 file changed

Lines changed: 21 additions & 15 deletions

File tree

src/mask.rs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -149,38 +149,44 @@ pub fn dfa_mask_store(
149149
) -> DFAMaskStore {
150150
let all_states = all_dfa_states(lexical_terminals);
151151
let mut store: DFAMaskStore = HashMap::new();
152+
152153
for (terminal, state_id) in &all_states {
153154
let dfa = &terminal.dfa;
155+
154156
// For now, hard-code the lookahead of two terminals.
155157
// let next_terminals = parser.next_terminals(&terminal.name);
156-
// Lookahead of zero terminals.
157-
let accept_sequence_names = vec![];
158-
let accept_sequence_terminals = vec![];
159-
store.insert(
158+
// Lookahead of zero terminals.
159+
let accept_sequence_names = vec![];
160+
let accept_sequence_terminals = vec![];
161+
162+
store.insert(
160163
(terminal.name.clone(), *state_id, accept_sequence_names),
161164
dfa_mask(dfa, state_id, &accept_sequence_terminals, &model_vocabulary),
162165
);
166+
163167
for next_terminal in lexical_terminals {
164168
// Lookahead of one terminal.
165169
let accept_sequence_names = vec![next_terminal.name.clone()];
166170
let accept_sequence_terminals = vec![next_terminal.clone()];
171+
167172
store.insert(
168173
(terminal.name.clone(), *state_id, accept_sequence_names),
169174
dfa_mask(dfa, state_id, &accept_sequence_terminals, &model_vocabulary),
170175
);
176+
171177
// let after_next_terminals = parser.next_terminals(next_terminal);
172-
for after_next_terminal in lexical_terminals {
173-
// Lookahead of two terminals.
174-
let accept_sequence_names =
175-
vec![next_terminal.name.clone(), after_next_terminal.name.clone()];
176-
let accept_sequence_terminals =
177-
vec![next_terminal.clone(), after_next_terminal.clone()];
178+
// for after_next_terminal in lexical_terminals {
179+
// // Lookahead of two terminals.
180+
// let accept_sequence_names =
181+
// vec![next_terminal.name.clone(), after_next_terminal.name.clone()];
182+
// let accept_sequence_terminals =
183+
// vec![next_terminal.clone(), after_next_terminal.clone()];
178184

179-
store.insert(
180-
(terminal.name.clone(), *state_id, accept_sequence_names),
181-
dfa_mask(dfa, state_id, &accept_sequence_terminals, &model_vocabulary),
182-
);
183-
}
185+
// store.insert(
186+
// (terminal.name.clone(), *state_id, accept_sequence_names),
187+
// dfa_mask(dfa, state_id, &accept_sequence_terminals, &model_vocabulary),
188+
// );
189+
// }
184190
}
185191
}
186192
store

0 commit comments

Comments
 (0)