Grammar constructor
Grammar(
- List<
ProductionRule?> rules, - String? globals,
- String? members
Implementation
Grammar(List<ProductionRule?> rules, this.globals, this.members) {
if (rules.isEmpty) {
throw ArgumentError('List of rules should not be empty');
}
final duplicates = <String>{};
var id = 0;
var terminalId = 0;
for (var rule in rules) {
if (rule == null) {
throw ArgumentError('rules');
}
rule.id = id++;
if (rule.kind == ProductionRuleKind.terminal) {
rule.terminalId = terminalId++;
}
this.rules.add(rule);
final name = rule.name;
if (ruleMap.containsKey(name)) {
duplicates.add(name);
}
ruleMap[rule.name] = rule;
}
for (final name in duplicates) {
errors.add('Duplicate rule name: $name');
}
_initialize();
}