Ejemplo n.º 1
0
        private List <symbol_reserved> reservedSym = new List <symbol_reserved>(); //保留字表

        /// <summary>
        /// 构造函数
        /// </summary>
        public SymbolAnalysis(PL0Compiler C)
        {
            ch         = (int)' ';
            LSymLine   = 1;
            lineNum    = 1;
            compiler   = C;
            sourceCode = new StreamReader(compiler.source);

            //添加保留词
            reservedSym.Add(new symbol_reserved(symbol.beginSym, "begin"));
            reservedSym.Add(new symbol_reserved(symbol.endSym, "end"));
            reservedSym.Add(new symbol_reserved(symbol.constSym, "const"));
            reservedSym.Add(new symbol_reserved(symbol.varSym, "var"));
            reservedSym.Add(new symbol_reserved(symbol.procedureSym, "procedure"));
            reservedSym.Add(new symbol_reserved(symbol.oddSym, "odd"));
            reservedSym.Add(new symbol_reserved(symbol.ifSym, "if"));
            reservedSym.Add(new symbol_reserved(symbol.thenSym, "then"));
            reservedSym.Add(new symbol_reserved(symbol.elseSym, "else"));
            reservedSym.Add(new symbol_reserved(symbol.callSym, "call"));
            reservedSym.Add(new symbol_reserved(symbol.whileSym, "while"));
            reservedSym.Add(new symbol_reserved(symbol.doSym, "do"));
            reservedSym.Add(new symbol_reserved(symbol.repeatSym, "repeat"));
            reservedSym.Add(new symbol_reserved(symbol.untilSym, "until"));
            reservedSym.Add(new symbol_reserved(symbol.readSym, "read"));
            reservedSym.Add(new symbol_reserved(symbol.writeSym, "write"));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        public SymbolTable(PL0Compiler C)
        {
            this.lev = 0;

            this.tx[0] = 0;
            SymTabItem nul = new SymTabItem();

            nul.name = "";
            SymTable.Add(nul);

            this.compiler = C;
        }
Ejemplo n.º 3
0
        private SymbolSet factorbegs    = new SymbolSet();         //因子开始符号集

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="C"></param>
        public GrammarAndSemanticAna(PL0Compiler C)
        {
            compiler = C;

            //添加声明部分开始符号
            declarebegs.Add(symbol.constSym);
            declarebegs.Add(symbol.varSym);
            declarebegs.Add(symbol.procedureSym);

            //添加语句开始符号
            statementbegs.Add(symbol.beginSym);
            statementbegs.Add(symbol.callSym);
            statementbegs.Add(symbol.whileSym);
            statementbegs.Add(symbol.ifSym);
            statementbegs.Add(symbol.repeatSym);

            //添加因子开始符号
            factorbegs.Add(symbol.ident);
            factorbegs.Add(symbol.number);
            factorbegs.Add(symbol.LParenthesis);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 构造函数
        /// </summary>
        public ErrorHandle(PL0Compiler C)
        {
            compiler = C;

            //添加错误
            errors.Add(1, "常数说明中的\"=\"写成\":=\"");
            errors.Add(2, "常数说明中的\"=\"后应是数字");
            errors.Add(3, "常数说明中标识符后应是\"=\"");
            errors.Add(4, "const, var, procedure 后应是标识符");
            errors.Add(5, "漏掉了\',\' 或\';\'");
            errors.Add(6, "过程说明后的符号不正确(应是语句开始符,或过程定义符");
            errors.Add(7, "应是语句开始符");
            errors.Add(8, "程序体内的语句部分的后跟符不正确");
            errors.Add(9, "程序结尾丢了句号\'.\'");
            errors.Add(10, "语句之间漏了\';\'");
            errors.Add(11, "标识符未说明");
            errors.Add(12, "赋值语句中, 赋值号左部标识符属性应是变量");
            errors.Add(13, "赋值语句左部标识符后应是赋值号\':=\'");
            errors.Add(14, "call 后应为标识符");
            errors.Add(15, "call 后标识符属性应为过程");
            errors.Add(16, "条件语句中丢了\'then\'");
            errors.Add(17, "丢了\'end\' 或\';\'");
            errors.Add(18, "while 型循环语句中丢了\'do\'");
            errors.Add(19, "语句后的符号不正确");
            errors.Add(20, "应为关系运算符");
            errors.Add(21, "表达式内标识符属性不能是过程");
            errors.Add(22, "表达式中漏掉右括号\')\'");
            errors.Add(23, "因子后的非法符号");
            errors.Add(24, "表达式的开始符不能是此符号");
            errors.Add(25, "repeat 型循环语句中没有until");
            errors.Add(26, "程序层次结构超过限制");
            errors.Add(30, "数位太长");
            errors.Add(31, "数越界");
            errors.Add(32, "read语句括号中的标识符不是变量");
            errors.Add(33, "语句漏掉左括号\'(\'");
            errors.Add(34, "语句漏掉右括号\')\'");
            errors.Add(35, "read语句缺乏变量");
            errors.Add(36, "程序体之外出现字符");
        }