Fix minor differences in generated C code
This commit is contained in:
parent
d845b81ee9
commit
79b9d5ebed
3 changed files with 16 additions and 18 deletions
|
|
@ -531,7 +531,6 @@ impl<'a> ParseTableBuilder<'a> {
|
|||
}
|
||||
|
||||
fn populate_used_symbols(&mut self) {
|
||||
self.parse_table.symbols.push(Symbol::end());
|
||||
let mut terminal_usages = vec![false; self.lexical_grammar.variables.len()];
|
||||
let mut non_terminal_usages = vec![false; self.syntax_grammar.variables.len()];
|
||||
let mut external_usages = vec![false; self.syntax_grammar.external_tokens.len()];
|
||||
|
|
@ -547,16 +546,17 @@ impl<'a> ParseTableBuilder<'a> {
|
|||
non_terminal_usages[symbol.index] = true;
|
||||
}
|
||||
}
|
||||
for (i, value) in terminal_usages.into_iter().enumerate() {
|
||||
if value {
|
||||
self.parse_table.symbols.push(Symbol::terminal(i));
|
||||
}
|
||||
}
|
||||
for (i, value) in external_usages.into_iter().enumerate() {
|
||||
if value {
|
||||
self.parse_table.symbols.push(Symbol::external(i));
|
||||
}
|
||||
}
|
||||
self.parse_table.symbols.push(Symbol::end());
|
||||
for (i, value) in terminal_usages.into_iter().enumerate() {
|
||||
if value {
|
||||
self.parse_table.symbols.push(Symbol::terminal(i));
|
||||
}
|
||||
}
|
||||
for (i, value) in non_terminal_usages.into_iter().enumerate() {
|
||||
if value {
|
||||
self.parse_table.symbols.push(Symbol::non_terminal(i));
|
||||
|
|
|
|||
|
|
@ -232,15 +232,13 @@ impl Generator {
|
|||
add_line!(self, "static const char *ts_symbol_names[] = {{");
|
||||
indent!(self);
|
||||
for symbol in self.parse_table.symbols.iter() {
|
||||
if *symbol != Symbol::end() {
|
||||
let name = self.sanitize_string(
|
||||
self.simple_aliases
|
||||
.get(symbol)
|
||||
.map(|alias| alias.value.as_str())
|
||||
.unwrap_or(self.metadata_for_symbol(*symbol).0),
|
||||
);
|
||||
add_line!(self, "[{}] = \"{}\",", self.symbol_ids[&symbol], name);
|
||||
}
|
||||
let name = self.sanitize_string(
|
||||
self.simple_aliases
|
||||
.get(symbol)
|
||||
.map(|alias| alias.value.as_str())
|
||||
.unwrap_or(self.metadata_for_symbol(*symbol).0),
|
||||
);
|
||||
add_line!(self, "[{}] = \"{}\",", self.symbol_ids[&symbol], name);
|
||||
}
|
||||
for (alias, symbol) in &self.alias_map {
|
||||
if symbol.is_none() {
|
||||
|
|
@ -864,7 +862,7 @@ impl Generator {
|
|||
|
||||
fn metadata_for_symbol(&self, symbol: Symbol) -> (&str, VariableType) {
|
||||
match symbol.kind {
|
||||
SymbolType::End => ("end", VariableType::Auxiliary),
|
||||
SymbolType::End => ("end", VariableType::Hidden),
|
||||
SymbolType::NonTerminal => {
|
||||
let variable = &self.syntax_grammar.variables[symbol.index];
|
||||
(&variable.name, variable.kind)
|
||||
|
|
@ -950,7 +948,7 @@ impl Generator {
|
|||
fn add_character(&mut self, c: char) {
|
||||
if c.is_ascii() {
|
||||
match c {
|
||||
'\0' => add!(self, "'\\0'"),
|
||||
'\0' => add!(self, "0"),
|
||||
'\'' => add!(self, "'\\''"),
|
||||
'\\' => add!(self, "'\\\\'"),
|
||||
'\t' => add!(self, "'\\t'"),
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ use hashbrown::HashMap;
|
|||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||
pub(crate) enum SymbolType {
|
||||
External,
|
||||
End,
|
||||
Terminal,
|
||||
NonTerminal,
|
||||
End,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue