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)); }