IEnumerable <HelperMethod> ExtractDistinctCompressionMethods(ElementSizeStrategy sizeStrategy) { var result = new List <HelperMethod>(); foreach (var data in _stateData) { var resourceName = _config.Tables[data.TableID].Name; foreach (var method in HelperMethod.GetDecompressionMethods(data.TransitionTable.Method, sizeStrategy, !string.IsNullOrEmpty(resourceName))) { if (!result.Contains(method)) { result.Add(method); } } } return(result); }
void WriteParserClass(TextWriter writer) { var size = ElementSizeStrategy.Get(_config.Manager.ElementSize); writer.Write(" "); writer.Write(_config.Manager.Visibility == ClassVisibility.Public ? "public" : "internal"); writer.Write(" abstract class "); writer.WriteLine(_config.Manager.ParserName); writer.WriteLine(" {"); if (_data.NeedsTerminalMask) { writer.Write(" const "); writer.Write(_config.Manager.TypeName); writer.Write(" ColumnMask = ("); writer.Write(_config.Manager.TypeName); writer.Write(")"); writer.Write(_data.TerminalMask); writer.WriteLine(";"); writer.WriteLine(); } WriteStatistics(writer, _data.Statistics, size); WriteParserConstructor(writer); writer.WriteLine(); if (_config.Manager.Trace) { WriteTraceProperty(writer); writer.WriteLine(); } foreach (var entryPoint in _config.EntryPoints) { WriteParseMethod(writer, entryPoint, _config.EntryPoints.Count != 1); writer.WriteLine(); } WriteParseMethod(writer); writer.WriteLine(); WriteReductionMethod(writer); writer.WriteLine(); if (!_config.UseErrorRecovery) { WriteUnexpectedTokenMethod(writer); } else { WriteReduceErrorMethod(writer); writer.WriteLine(); WriteCanBeFollowedBy(writer); } writer.WriteLine(); foreach (var method in HelperMethod.GetDecompressionMethods(_data.Actions.Method, size, !string.IsNullOrEmpty(_config.TableResourceName))) { method.Write(writer, 2); writer.WriteLine(); } writer.Write(" protected abstract "); writer.Write(_config.Manager.TypeName); writer.Write(" GetTokenType(Type_"); writer.Write(_config.TerminalType.Label.Text); writer.WriteLine(" terminal);"); writer.WriteLine(); foreach (var method in GetAbstractMethods(_config)) { WriteReductionMethod(writer, method); } if (_config.Manager.Trace) { writer.WriteLine(); WriteTraceMethod(writer); writer.WriteLine(); WriteReductionStringMethod(writer); } writer.WriteLine(); WriteFields(writer, size); writer.WriteLine(); WriteStateStruct(writer); writer.WriteLine(); WriteTableCacheMembers(writer); writer.WriteLine(" }"); }