Exemplo n.º 1
0
        /// <summary>
        /// 生成整个<code>EnumTokenTypeSG</code>枚举类型文件的源代码
        /// </summary>
        /// <returns></returns>
        public string GenerateEnumTokenType()
        {
            int preSpace            = 0;
            LL1GeneraterInput input = new LL1GeneraterInput(this);

            return(GenerateEnumTokenType(ref preSpace, input));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 生成<code>EnumTokenTypeSG</code>的源码
        /// </summary>
        /// <returns></returns>
        public string GenerateEnumTokenTypeClass()
        {
            int preSpace            = m_preSpaceOfLL1SyntaxParser;
            LL1GeneraterInput input = new LL1GeneraterInput(this);

            return(GenerateEnumTokenTypeClass(ref preSpace, input));
        }
Exemplo n.º 3
0
        /// <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)));
            }
        }
Exemplo n.º 4
0
        /// <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"));
            }
        }
Exemplo n.º 5
0
 /// <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()));
 }
Exemplo n.º 6
0
        /// <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());
        }
Exemplo n.º 7
0
        /// <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());
        }
Exemplo n.º 8
0
        /// <summary>
        /// 生成整个<code>EnumTokenTypeSG</code>枚举类型文件的源代码
        /// </summary>
        /// <param name="input">输入</param>
        /// <returns></returns>
        public string GenerateEnumTokenType(LL1GeneraterInput input)
        {
            int preSpace = 0;

            return(GenerateEnumTokenType(ref preSpace, input));
        }
Exemplo n.º 9
0
 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)));
         }
     }
 }
Exemplo n.º 10
0
        /// <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));
        }
Exemplo n.º 11
0
 /// <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) + "/// &amp;");
     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) + "/// &lt;");
     builder.AppendLine(GetSpaces(preSpace) + "/// </summary>");
     builder.AppendLine(GetSpaces(preSpace) + "LessThan,");
     builder.AppendLine(GetSpaces(preSpace) + "/// <summary>");
     builder.AppendLine(GetSpaces(preSpace) + "/// &gt;");
     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,");
 }