资源简介

这是我在大三的时候解释器实践的课程设计,是用C#开发的,包括词法分析、语法分析和编译执行阶段,文档比较齐全,可供初步学习解释器的同学看看,但不鼓励直接拿来当作业用,起码也得自己看看源码,分析分析下,对自己也好

资源截图

代码片段和文件信息

/*
 * 作者:黎国梁
 * 班级:三班
 * 学号:200632580088
 */
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Regularexpressions;
using System.IO;

namespace CMMCompiler
{
    /// 
    /// AccessTable类包含中间代码访问符号表的方法
    /// 

    class AccessTable : MidCode
    {
        //可以为VARGTARGSARG和常数
        string ARG = ““;

        //可以为标识符
        string IN_1 = ““;

        //数组下标为标识符或者常数如果不是数组为空.
        string IN_2 = ““;

        //为纯数字用来判断数组下标是否为常数 还是 标识符
        string pattern = @“^[0-9]+$“;

        /// 
        /// 此方法,分解VARG(A)等,为VARGA,返回A
        /// 

        /// 需要分解的对象
        /// 返回A变量
        private string find_Table_Kind(string result)
        {
            int n = 0;
            ARG = ““;
            IN_1 = ““;
            IN_2 = ““;

            char[] c = result.ToCharArray();

            while (n < c.Length && c[n].ToString() != “(“)
            {
                ARG = ARG + c[n].ToString(); //得到ARG用于访问表名
                n++;
            }

            n++;
            while (n < c.Length && c[n].ToString() != “)“ && c[n].ToString() != “[“)
            {
                IN_1 = IN_1 + c[n].ToString(); //得到IN_1用于查找表内成员
                n++;
            }

            n++;
            while (n < c.Length && c[n].ToString() != “]“)
            {
                IN_2 = IN_2 + c[n].ToString(); //得到IN_2用于访问数组内部变量
                n++;
            }

            return IN_1;
        }

        /// 
        /// 此方法返回result对应的所在表的value值
        /// 

        /// 需要返回值的对象
        /// 
        public string getValue(string result)
        {
            IN_1 = find_Table_Kind(result);
            switch (ARG)
            {
                case “VARG“: //标识符
                    int indexID = IDlist.IndexOf(IN_1);
                    IDtable BStmp = (IDtable)IDtablelist[indexID];
                    return BStmp.Value;
                case “TARG“: //临时变量
                    int indexTempID = TempIDlist.IndexOf(IN_1);
                    TempIDtable LStmp = (TempIDtable)TempIDtablelist[indexTempID];
                    return LStmp.Value;
                case “SARG“: //数组

                    try //如果数组出界返回一个空值null
                    {
                        if (!Regex.IsMatch(IN_2 pattern)) //如果数组下标为常数
                        {
                            int indexBS1 = IDlist.IndexOf(IN_2);
                            IDtable BStmp1 = (IDtable)IDtablelist[indexBS1];
                            IN_2 = BStmp1.Value; //得到数组下标的值
                        }

                        int indexSZ = SZlist.IndexOf(IN_1);
                        SZtable SZtmp = (SZtable)SZtablelist[indexSZ];
                        if (Convert.ToInt32(IN_2) > Convert.ToInt32(SZtmp.Length) - 1)
         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6656  2009-01-01 12:45  CMM编译器\CMMCompiler\CMMCompiler\AccessTable.cs

     文件      39359  2009-01-01 12:46  CMM编译器\CMMCompiler\CMMCompiler\Analysis.cs

     文件      94208  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\bin\Debug\CMMCompiler.exe

     文件     151040  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\bin\Debug\CMMCompiler.pdb

     文件      14328  2009-12-20 13:16  CMM编译器\CMMCompiler\CMMCompiler\bin\Debug\CMMCompiler.vshost.exe

     文件        490  2008-04-30 03:19  CMM编译器\CMMCompiler\CMMCompiler\bin\Debug\CMMCompiler.vshost.exe.manifest

     文件      89600  2009-10-26 11:12  CMM编译器\CMMCompiler\CMMCompiler\bin\Release\CMMCompiler.exe

     文件     144896  2009-10-26 11:12  CMM编译器\CMMCompiler\CMMCompiler\bin\Release\CMMCompiler.pdb

     文件          1  2008-12-30 14:56  CMM编译器\CMMCompiler\CMMCompiler\ClassDiagram1.cd

     文件       5289  2009-10-26 11:11  CMM编译器\CMMCompiler\CMMCompiler\CMMCompiler.csproj

     文件       5814  2007-12-30 21:53  CMM编译器\CMMCompiler\CMMCompiler\Form3.resx

     文件      16185  2009-01-01 12:46  CMM编译器\CMMCompiler\CMMCompiler\Interpret.cs

     文件      22683  2009-01-01 12:46  CMM编译器\CMMCompiler\CMMCompiler\LexicalAnalysis.cs

     文件      13294  2008-10-09 16:20  CMM编译器\CMMCompiler\CMMCompiler\Logo.ico

     文件      16134  2009-01-01 12:50  CMM编译器\CMMCompiler\CMMCompiler\MainForm.cs

     文件      23445  2009-01-01 12:50  CMM编译器\CMMCompiler\CMMCompiler\MainForm.Designer.cs

     文件      26811  2009-01-01 12:50  CMM编译器\CMMCompiler\CMMCompiler\MainForm.resx

     文件      22715  2009-01-01 12:49  CMM编译器\CMMCompiler\CMMCompiler\MidCode.cs

     文件       5052  2009-01-01 13:03  CMM编译器\CMMCompiler\CMMCompiler\obj\CMMCompiler.csproj.FileListAbsolute.txt

     文件        995  2009-12-20 13:16  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\CMMCompiler.csproj.FileListAbsolute.txt

     文件        777  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\CMMCompiler.csproj.GenerateResource.Cache

     文件      94208  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\CMMCompiler.exe

     文件      13860  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\CMMCompiler.MainForm.resources

     文件     151040  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\CMMCompiler.pdb

     文件       4380  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\CMMCompiler.Properties.Resources.resources

     文件       5120  2009-10-26 11:13  CMM编译器\CMMCompiler\CMMCompiler\obj\Debug\TempPE\Properties.Resources.Designer.cs.dll

     文件       1011  2009-10-26 11:12  CMM编译器\CMMCompiler\CMMCompiler\obj\Release\CMMCompiler.csproj.FileListAbsolute.txt

     文件        777  2009-10-26 11:12  CMM编译器\CMMCompiler\CMMCompiler\obj\Release\CMMCompiler.csproj.GenerateResource.Cache

     文件      89600  2009-10-26 11:12  CMM编译器\CMMCompiler\CMMCompiler\obj\Release\CMMCompiler.exe

     文件      13860  2009-10-26 11:12  CMM编译器\CMMCompiler\CMMCompiler\obj\Release\CMMCompiler.MainForm.resources

............此处省略48个文件信息

评论

共有 条评论