⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program.cs

📁 简单的词法分析器 利用vc编程 功能 可以打开任意位置和名称的原文件进行词法分析
💻 CS
📖 第 1 页 / 共 2 页
字号:
            {
                stringArrange[0] = st;
            }
            else
            {
                string[] oldA = stringArrange;//刚得到的字符串
                int i = oldA.Length + 1;
                stringArrange = new string[i];//申请一个长一个的字符数组。
                oldA.CopyTo(stringArrange, 0);//将先前的字符数组考到现在这个数组中。
                stringArrange[stringArrange.Length - 1] = st;
            }
        }
        /// <summary>
        /// 将Text中的字符串,存入一个字符数组中。
        /// </summary>
        /// <returns></returns>
        private char[] textToCharArray()
        {
            string stringTemp;
            stringTemp = this.richTextBox1.Text;
            char[] getch = stringTemp.ToCharArray();//要处理的字符都在getch这个数组中。
            return getch;
        }
        /// <summary>
        /// 字符数组 到 单词数组
        /// </summary>
        /// <param name="getch"></param>
        /// <returns></returns>
        private string[] charArrayToStringArray(char[] getch)//将字符数组转换为字符串数组。即词法分析后的单词数组。
        {
            string[] stringArrange ={ "" };//用这个字符串数组存放词法分析后得到的单词。
            char charTemp;
            string stringSave = "";//  存放一个分析得到的单词

            //一次循环因得到一个单词。
            for (int i = 0; i < getch.Length; i++)
            {
                charTemp = getch[i];

                //由字母开头 数字和字母组成的单词。
                if (charTemp >= 'a' &&
                 charTemp <= 'z'
                 ||
                 charTemp >= 'A' &&
                 charTemp <= 'Z')
                {
                    stringSave = charTemp.ToString();
                    i = i + 1;
                    int test = 0;//判断循环是否结束,1 为结束。
                    while (test == 0)
                    {
                        charTemp = getch[i];
                        if (charTemp >= 'a' &&
                         charTemp <= 'z'
                         ||
                         charTemp >= 'A' &&
                         charTemp <= 'Z'
                         ||
                         charTemp >= '0' &&
                         charTemp <= '9')
                        {
                            stringSave = stringSave + charTemp.ToString();
                            i = i + 1;
                        }
                        else
                            test = 1;
                    }
                    stringToArrayString(ref stringArrange, stringSave);
                }
                stringSave = "";
                //由数字组成的单词。
                if (charTemp >= '0' &&
                 charTemp <= '9')
                {
                    stringSave = stringSave + charTemp.ToString();
                    i = i + 1;
                    int test1 = 0;
                    while (test1 == 0)
                    {
                        charTemp = getch[i];
                        if (charTemp >= '0' &&
                         charTemp <= '9')
                        {
                            stringSave = stringSave + charTemp.ToString();
                            i = i + 1;
                        }
                        else
                            test1 = 1;
                    }
                    stringToArrayString(ref stringArrange, stringSave);
                }
                stringSave = "";
                //由运算符组成的单词。
                if (charTemp == '+'
                 || charTemp == '-'
                 || charTemp == '*'
                 || charTemp == '/'
                 || charTemp == ':'
                 || charTemp == '='
                 || charTemp == '?'
                 || charTemp == '$'
                 || charTemp == '<'
                 || charTemp == '>'
                 || charTemp == '!')
                {
                    stringSave = stringSave + charTemp.ToString();
                    i = i + 1;
                    int test2 = 0;
                    while (test2 == 0)
                    {
                        charTemp = getch[i];
                        if (charTemp == '+'
                         || charTemp == '-'
                         || charTemp == '*'
                         || charTemp == '/'
                         || charTemp == '='
                         || charTemp == '<'
                         || charTemp == '>'
                         || charTemp == '!')
                        {
                            stringSave = stringSave + charTemp.ToString();
                            i = i + 1;
                        }
                        else
                            test2 = 1;
                    }
                    stringToArrayString(ref stringArrange, stringSave);
                }
                stringSave = "";
                //由分界符组成的单词。
                if (charTemp == '('
                 || charTemp == ')'
                 || charTemp == '{'
                 || charTemp == '}'
                 || charTemp == '['
                 || charTemp == ']'
                 || charTemp == ','
                 || charTemp == ':'
                 || charTemp == ';'
                 || charTemp == '"'
                 || charTemp == '\''
                 || charTemp == '\\')
                {
                    stringSave = stringSave + charTemp.ToString();
                    stringToArrayString(ref stringArrange, stringSave);
                }
            }
            return stringArrange;
        }
        /// <summary>
        /// 单词数组 到 二维单词数组。
        /// </summary>
        /// <param name="stringArray"></param>
        /// <returns></returns>
        private string[,] stringArrayToTwoStringArray(string[] stringArray)
        {
            //存放单词标识后的结果。
            string[,] twoArray = new string[2, 1];
            //单词的标志
            int j = 0;


            //每循环一次,把一个单词归于一类,即前面加上一个数字。
            for (int i = 0; i < stringArray.Length; i++)
            {
                //Keyword
                if (stringArray[i] == "INT"
                 || stringArray[i] == "int"
                 || stringArray[i] == "IF"
                 || stringArray[i] == "if"
                 || stringArray[i] == "THEN"
                 || stringArray[i] == "then"
                 || stringArray[i] == "while"
                 || stringArray[i] == "WHILE"
                 || stringArray[i] == "do"
                 || stringArray[i] == "DO"
                 || stringArray[i] == "else"
                 || stringArray[i] == "ELSE")
                {
                    twoArray[0, j] = "Keyword";
                    twoArray[1, j] = stringArray[i];
                    this.oneArrayToTwo(ref twoArray, ref j);
                }
                //Operator 
                else
                    if (stringArray[i] == "+"
                     || stringArray[i] == "-"
                     || stringArray[i] == "*"
                     || stringArray[i] == "/"
                     || stringArray[i] == ">"
                     || stringArray[i] == "<"
                     || stringArray[i] == ">="
                     || stringArray[i] == "<="
                     || stringArray[i] == "!="
                     || stringArray[i] == "++"
                     || stringArray[i] == "--"
                     || stringArray[i] == ":=")
                    {
                        twoArray[0, j] = "Operator";
                        twoArray[1, j] = stringArray[i];
                        this.oneArrayToTwo(ref twoArray, ref j);
                    }
                 //Separator 
                  else
                        if (stringArray[i] == "("
                         || stringArray[i] == ")"
                         || stringArray[i] == "{"
                         || stringArray[i] == "}"
                         || stringArray[i] == "["
                         || stringArray[i] == "]"
                         || stringArray[i] == ","
                         || stringArray[i] == ";"
                         || stringArray[i] == "\""
                         || stringArray[i] == "/*"
                         || stringArray[i] == "*/")
                        {
                            twoArray[0, j] = "Separator";
                            twoArray[1, j] = stringArray[i];
                            this.oneArrayToTwo(ref twoArray, ref j);
                        }

                        //Digit
                        else
                            if (stringArray[i].ToCharArray()[0] >= '0' &&
                             stringArray[i].ToCharArray()[0] <= '9')
                            {
                                twoArray[0, j] = "Digit";
                                twoArray[1, j] = stringArray[i];
                                this.oneArrayToTwo(ref twoArray, ref j);
                            }
                            //Identifier
                            else
                             if (stringArray[i].ToCharArray()[0] >= 'a' &&
                             stringArray[i].ToCharArray()[0] <= 'z'||
                             stringArray[i].ToCharArray()[0] >= 'A' &&
                             stringArray[i].ToCharArray()[0] <= 'Z')
                            {
                                twoArray[0, j] = "Identifier";
                                twoArray[1, j] = stringArray[i];
                                this.oneArrayToTwo(ref twoArray, ref j);
                            }
                        
                        // Error
                        else
                            {
                            twoArray[0, j] = "Error";
                            twoArray[1, j] = stringArray[i];
                            this.oneArrayToTwo(ref twoArray, ref j);
                        }
            }
            return twoArray;
        }

    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -