Fix computation of MAX_ALIAS_SEQUENCE_LENGTH
This commit is contained in:
parent
ba96e4961b
commit
a0e65018ba
3 changed files with 8 additions and 9 deletions
|
|
@ -675,6 +675,9 @@ impl<'a> ParseTableBuilder<'a> {
|
|||
while alias_sequence.last() == Some(&None) {
|
||||
alias_sequence.pop();
|
||||
}
|
||||
if item.production.steps.len() > self.parse_table.max_aliased_production_length {
|
||||
self.parse_table.max_aliased_production_length = item.production.steps.len()
|
||||
}
|
||||
if let Some(index) = self
|
||||
.parse_table
|
||||
.alias_sequences
|
||||
|
|
@ -721,8 +724,9 @@ pub(crate) fn build_parse_table(
|
|||
parse_state_queue: VecDeque::new(),
|
||||
parse_table: ParseTable {
|
||||
states: Vec::new(),
|
||||
alias_sequences: Vec::new(),
|
||||
symbols: Vec::new(),
|
||||
alias_sequences: Vec::new(),
|
||||
max_aliased_production_length: 0,
|
||||
},
|
||||
following_tokens: vec![LookaheadSet::new(); lexical_grammar.variables.len()],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,17 +191,11 @@ impl Generator {
|
|||
"#define EXTERNAL_TOKEN_COUNT {}",
|
||||
self.syntax_grammar.external_tokens.len()
|
||||
);
|
||||
if let Some(max_alias_sequence_length) = self
|
||||
.parse_table
|
||||
.alias_sequences
|
||||
.iter()
|
||||
.map(|seq| seq.len())
|
||||
.max()
|
||||
{
|
||||
if self.parse_table.max_aliased_production_length > 0 {
|
||||
add_line!(
|
||||
self,
|
||||
"#define MAX_ALIAS_SEQUENCE_LENGTH {}",
|
||||
max_alias_sequence_length
|
||||
self.parse_table.max_aliased_production_length
|
||||
);
|
||||
}
|
||||
add_line!(self, "");
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ pub(crate) struct ParseTable {
|
|||
pub states: Vec<ParseState>,
|
||||
pub symbols: Vec<Symbol>,
|
||||
pub alias_sequences: Vec<Vec<Option<Alias>>>,
|
||||
pub max_aliased_production_length: usize,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue