Пример #1
0
        public FA ToLexer(ISymbolResolver resolver)
        {
            var fas = new List <FA>();

            foreach (var prod in Productions)
            {
                var exp = prod.Value.Expression;
                FA  fa  = null;
                if (exp.IsTerminal)
                {
                    var l = exp as EbnfLiteralExpression;
                    if (null != l)
                    {
                        fa = FA.Literal(l.Value, resolver.GetSymbolId(prod.Key));
                    }

                    var r = exp as EbnfRegexExpression;
                    if (null != r)
                    {
                        fa = FA.Parse(r.Value, resolver.GetSymbolId(prod.Key));
                    }

                    System.Diagnostics.Debug.Assert(null != fa, "Unsupported terminal expression type.");
                    fas.Add(fa);
                }
            }
            return(FA.Lexer(fas));
        }