/// <summary> /// 生成整个<code>EnumTokenTypeSG</code>枚举类型文件的源代码 /// </summary> /// <returns></returns> public string GenerateEnumTokenType() { int preSpace = 0; LL1GeneraterInput input = new LL1GeneraterInput(this); return(GenerateEnumTokenType(ref preSpace, input)); }
/// <summary> /// 生成<code>EnumTokenTypeSG</code>的源码 /// </summary> /// <returns></returns> public string GenerateEnumTokenTypeClass() { int preSpace = m_preSpaceOfLL1SyntaxParser; LL1GeneraterInput input = new LL1GeneraterInput(this); return(GenerateEnumTokenTypeClass(ref preSpace, input)); }
/// <summary> /// 获取<code>EnumVTypeSG</code>除默认项以外的选项 /// </summary> /// <param name="builder"></param> /// <param name="this.GrammarName"></param> /// <param name="preSpace"></param> /// <param name="input"></param> private void GenerateEnumVTypeWithoutItemUnknown( StringBuilder builder, ref int preSpace, LL1GeneraterInput input) { var nonTerminalList = input.NonTerminalList; foreach (var nonTerminal in nonTerminalList) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// {0}", this.GetProduction(nonTerminal).ToString(true))); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("{0}," , GetEnumVTypeSGItem(nonTerminal))); } var terminalList = input.TerminalList; terminalList.Add(ProductionNode.startEndLeave); foreach (var terminal in terminalList) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// {0}", terminal.NodeNote.ToHtml())); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("{0}," , GetEnumVTypeSGItem(terminal))); } }
/// <summary> /// 获取<code>EnumTokenTypeSG</code>除默认项以外的选项 /// </summary> /// <param name="builder"></param> /// <param name="this.GrammarName"></param> /// <param name="preSpace"></param> /// <param name="input"></param> private void GenerateEnumTokenTypeWithoutItemUnknown( StringBuilder builder, ref int preSpace, LL1GeneraterInput input) { var terminalList = input.TerminalList; //var map = GetTokenMap(input); //if (map.Contains(EnumCharTypeCG.Letter)) //{ // builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); // builder.AppendLine(GetSpaces(preSpace) + "/// 标识符"); // builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); // builder.AppendLine(GetSpaces(preSpace) + "Identifier,"); //} //if (map.Contains(EnumCharTypeCG.Number)) //{ // builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); // builder.AppendLine(GetSpaces(preSpace) + "/// 常数"); // builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); // builder.AppendLine(GetSpaces(preSpace) + "Number,"); //} //terminalList.Remove(ProductionNode.epsilonLeave); terminalList.Add(ProductionNode.startEndLeave); var needIdentifier = false; var identifierExists = false; foreach (var terminal in terminalList) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// {0}", terminal.NodeNote.ToHtml())); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("{0}," , GetEnumTokenTypeSGItem(terminal))); if (terminal.NodeName == "identifier") { identifierExists = true; } if (!needIdentifier) { var ct = GetCharType(terminal.NodeName[0]); if (ct == EnumCharType.Letter || ct == EnumCharType.UnderLine) { needIdentifier = true; } } } if (needIdentifier && (!identifierExists)) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// {0}", "标识符".ToHtml())); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("{0},", "identifier")); } }
/// <summary> /// 获取<code>EnumTokenTypeSG</code>的默认项 /// </summary> /// <param name="builder"></param> /// <param name="this.GrammarName"></param> /// <param name="preSpace"></param> /// <param name="input"></param> private void GenerateEnumTokenTypeItemUnknown( StringBuilder builder, ref int preSpace, LL1GeneraterInput input) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// {0}", GetEnumTokenTypeSGItemDefaultNote())); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("{0}," , GetEnumTokenTypeSGItemDefaultName())); }
/// <summary> /// 生成整个<code>EnumTokenTypeSG</code>枚举类型文件的源代码 /// </summary> /// <param name="preSpace">预留空白长度</param> /// <param name="input"></param> /// <returns></returns> public string GenerateEnumTokenType(ref int preSpace, LL1GeneraterInput input) { StringBuilder builder = new StringBuilder(); builder.AppendLine(GetSpaces(preSpace) + string.Format("namespace {0}", this.Namespace)); builder.AppendLine(GetSpaces(preSpace) + "{"); IncreasepreSpace(ref preSpace); builder.AppendLine(GenerateEnumTokenTypeClass(ref preSpace, input)); DecreasepreSpace(ref preSpace); builder.AppendLine(GetSpaces(preSpace) + "}"); builder.AppendLine(GetSpaces(preSpace)); return(builder.ToString()); }
/// <summary> /// 生成<code>EnumCharTypeSG</code>的源码 /// </summary> /// <param name="preSpace">预留空白长度</param> /// <param name="input"></param> /// <returns></returns> public string GenerateEnumCharTypeClass(ref int preSpace, LL1GeneraterInput input) { StringBuilder builder = new StringBuilder(); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// 文法{0}的字符枚举类型", this.GrammarName)); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("public enum {0}" , GetEnumCharTypeSG())); builder.AppendLine(GetSpaces(preSpace) + "{"); IncreasepreSpace(ref preSpace); GenerateEnumCharTypeItemUnknown(builder, ref preSpace, input); GenerateEnumCharTypeWithoutItemUnknown(builder, ref preSpace, input); DecreasepreSpace(ref preSpace); builder.AppendLine(GetSpaces(preSpace) + "}"); return(builder.ToString()); }
/// <summary> /// 生成整个<code>EnumTokenTypeSG</code>枚举类型文件的源代码 /// </summary> /// <param name="input">输入</param> /// <returns></returns> public string GenerateEnumTokenType(LL1GeneraterInput input) { int preSpace = 0; return(GenerateEnumTokenType(ref preSpace, input)); }
private void GenerateEnumTokenTypeitem_null_identifier_number(StringBuilder builder, ref int preSpace, LL1GeneraterInput input) { foreach (var item in input.TerminalList) { if (item == ProductionNode.tail_null || item == ProductionNode.tail_identifier || item == ProductionNode.tail_number) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("/// {0}", item.NodeNote.ToHtml())); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + string.Format("{0},", GetEnumVTypeSGItem(item))); } } }
/// <summary> /// 生成<code>EnumCharTypeSG</code>的源码 /// </summary> /// <param name="input">输入</param> /// <returns></returns> public string GenerateEnumCharTypeClass(LL1GeneraterInput input) { int preSpace = m_preSpaceOfLL1SyntaxParser; return(GenerateEnumCharTypeClass(ref preSpace, input)); }
/// <summary> /// 获取<code>EnumCharTypeSG</code>除默认项以外的选项 /// </summary> /// <param name="builder"></param> /// <param name="preSpace"></param> /// <param name="input"></param> private void GenerateEnumCharTypeWithoutItemUnknown( StringBuilder builder, ref int preSpace, LL1GeneraterInput input) { builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// a-z A-Z"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Letter,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// 汉字"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "ChineseLetter,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// 0 1 2 3 4 5 6 7 8 9"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Number,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// _"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "UnderLine,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ."); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Dot,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ,"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Comma,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// +"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Plus,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// -"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Minus,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// *"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Multiply,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// /"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Divide,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// %"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Percent,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ^"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Xor,//10"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// &"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "And,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// |"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Or,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ~"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Reverse,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// $"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Dollar,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// <"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "LessThan,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// >"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "GreaterThan,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ("); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "LeftParentheses,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// )"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "RightParentheses,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ["); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "LeftBracket,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ]"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "RightBracket,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// {"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "LeftBrace,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// }"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "RightBrace,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// !"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Not,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// #"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Pound,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// \\"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Slash,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ?"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Question,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// '"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Quotation,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// \""); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "DoubleQuotation,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// :"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Colon,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ;"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Semicolon,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// ="); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Equality,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// @"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "At,"); builder.AppendLine(GetSpaces(preSpace) + "/// <summary>"); builder.AppendLine(GetSpaces(preSpace) + "/// space Tab \\r\\n"); builder.AppendLine(GetSpaces(preSpace) + "/// </summary>"); builder.AppendLine(GetSpaces(preSpace) + "Space,"); }