1 using Mercury.Exceptions;
2 using Mercury.Nucleus.Collections;
4 using System.Collections.Generic;
7 namespace Mercury.Syntax
23 public IReadOnlyList<Symbol> Nonterminals {
get;
internal set; }
26 public IReadOnlyList<Symbol> Terminals {
get;
internal set; }
29 public IReadOnlyList<Rule> Rules {
get;
internal set; }
33 public Symbol Root {
get;
internal set; }
48 internal class ExtendedGrammar : Grammar
52 internal IMultiDictionary<Symbol, Rule> rulemap;
57 public IReadOnlyList<Rule> TerminalRules {
get;
internal set; }
60 public IReadOnlyList<Rule> EpsilonRules {
get;
internal set; }
69 public IReadOnlyList<Rule> RulesWithInitial(Symbol s)
71 IReadOnlyList<Rule> rules;
73 return rulemap.TryGetValue(s, out rules) ?
new List<Rule>(rules) : new List<Rule>();
Represents a single symbol of the grammar. This is an immutable class. For a symbol name to be val...
Represents a Context-Free Grammar. This is an immutable class, to create a grammar use Mercury...