Exemple #1
0
            public NonTerminalProduction(IParserConfigurator <T> configurator, INonTerminal <T> resultSymbol, object[] symbols)
            {
                this.resultSymbol = resultSymbol;
                this.symbols      = new ISymbol <T> [symbols.Length]; // Move production symbols to the list
                int i = 0;

                foreach (object part in symbols)
                {
                    if (part is string regex)
                    {
                        if (configurator.LexerSettings.EscapeLiterals)
                        {
                            regex = Regex.Escape(regex);
                        }

                        this.symbols[i]           = configurator.CreateTerminal(regex, null, true);
                        this.symbols[i].DebugName = part as string; // Set debug name to unescaped string, so it's easy on the eyes.
                    }
                    else
                    {
                        this.symbols[i] = (ISymbol <T>)symbols[i];
                    }

                    ++i;
                }
            }
        public static INonTerminal <T> CreateNonTerminal <T>(this IParserConfigurator <T> conf, string name)
        {
            INonTerminal <T> nter = conf.CreateNonTerminal();

            nter.DebugName = name;

            return(nter);
        }
 public static ITerminal <T> CreateTerminal <T>(this IParserConfigurator <T> conf, string regex, T val, bool tp = false) =>
 conf.CreateTerminal(regex, _ => val, tp);
Exemple #4
0
 public NonTerminal(IParserConfigurator <T> configurator)
 {
     this.configurator = configurator;
     this.productions  = new List <NonTerminalProduction>();
 }
Exemple #5
0
 private static TerminalWrapper <string> CreateTerminal(
     IParserConfigurator <object> configurator,
     string regex)
 {
     return(new TerminalWrapper <string>(configurator.CreateTerminal(regex)));
 }
Exemple #6
0
 private static TerminalWrapper <T> CreateTerminalParse <T>(
     IParserConfigurator <object> configurator,
     string regex, Func <string, T> onParse)
 {
     return(new TerminalWrapper <T>(configurator.CreateTerminal(regex, x => onParse(x))));
 }
Exemple #7
0
 private static NonTerminalWrapper <T> CreateNonTerminal <T>(IParserConfigurator <object> configurator)
 {
     return(new NonTerminalWrapper <T>(configurator.CreateNonTerminal()));
 }