亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pl0.c

?? C語言編寫的PLO源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    int i, cx1, cx2;
    bool nxtlev[symnum];

    if (sym == ident)   /* 準備按照賦值語句處理 */
    {
        i = position(id, *ptx);
        if (i == 0)
    	{
            error(11);  /* 變量未找到 */
    	}
        else
    	{
            if(table[i].kind != variable)
    		{
                error(12);  /* 賦值語句格式錯誤 */
            	i = 0;
    		}
        	else
    		{
                getsymdo;
                if(sym == becomes)  // becomes為冒號等于
        		{
                	getsymdo;
        		}
        		else
        		{
                    error(13);  /* 沒有檢測到賦值符號 */
        		}
                memcpy(nxtlev, fsys, sizeof(bool)*symnum);
                expressiondo(nxtlev, ptx, lev); /* 處理賦值符號右側表達式 */
                if(i != 0)
        		{
                    /* expression將執行一系列指令,但最終結果將會保存在棧頂,執行sto命令完成賦值 */
                    gendo(sto, lev-table[i].level, table[i].adr);
        		}
    		}
        }//if (i == 0)
    }
    else
    {
        if (sym == readsym) /* 準備按照read語句處理 */
    	{
            getsymdo;
            if (sym != lparen)   //lparen為左括號
    		{
                error(34);  /* 格式錯誤,應是左括號 */
    		}
        	else
    		{
        		do {
                	getsymdo;
                    if (sym == ident)
        			{
                        i = position(id, *ptx); /* 查找要讀的變量 */
        			}
            		else
        			{
            			i=0;
        			}

                	if (i == 0)
        			{
                        error(35);  /* read()中應是聲明過的變量名 */
        			}
                    else if (table[i].kind != variable)
        			{
                        error(32);  /* read()參數表的標識符不是變量 */
        			}
            		else
        			{
                        gendo(opr, 0, 16);  /* 生成輸入指令,讀取值到棧頂 */
                        gendo(sto, lev-table[i].level, table[i].adr);   /* 儲存到變量 */
        			}
                	getsymdo;

                } while (sym == comma); /* 一條read語句可讀多個變量,comma為逗號 */
    		}
            if(sym != rparen)
    		{
                error(33);  /* 格式錯誤,應是右括號 */
                while (!inset(sym, fsys))   /* 出錯補救,直到收到上層函數的后跟符號 */
        		{
                	getsymdo;
        		}
    		}
        	else
    		{
                getsymdo;
    		}
    	}
        else
    	{
            if (sym == writesym)    /* 準備按照write語句處理,與read類似 */
    		{
                getsymdo;
                if (sym == lparen)
        		{
            		do {
                		getsymdo;
                        memcpy(nxtlev, fsys, sizeof(bool)*symnum);
                        nxtlev[rparen] = true;
                        nxtlev[comma] = true;       /* write的后繼符號為) or , */
                        expressiondo(nxtlev, ptx, lev); /* 調用表達式處理,此處與read不同,read為給變量賦值 */
                        gendo(opr, 0, 14);  /* 生成輸出指令,輸出棧頂的值 */
                    } while (sym == comma);
                    if (sym != rparen)
        			{
                        error(33);  /* write()中應為完整表達式 */
        			}
            		else
        			{
                		getsymdo;
        			}
        		}
                gendo(opr, 0, 15);  /* 輸出換行 */
    		}
        	else
    		{
                if (sym == callsym) /* 準備按照call語句處理 */
        		{
                	getsymdo;
                    if (sym != ident)
        			{
                        error(14);  /* call后應為標識符 */
        			}
            		else
        			{
                        i = position(id, *ptx);
                    	if (i == 0)
        				{
                            error(11);  /* 過程未找到 */
        				}
            			else
        				{
                            if (table[i].kind == procedur)
        					{
                                gendo(cal, lev-table[i].level, table[i].adr);   /* 生成call指令 */
        					}
            				else
        					{
                                error(15);  /* call后標識符應為過程 */
        					}
        				}
                		getsymdo;
        			}
        		}
        		else
        		{
                    if (sym == ifsym)   /* 準備按照if語句處理 */
        			{
                		getsymdo;
                        memcpy(nxtlev, fsys, sizeof(bool)*symnum);
                        nxtlev[thensym] = true;
                        nxtlev[dosym] = true;   /* 后跟符號為then或do */
                        conditiondo(nxtlev, ptx, lev); /* 調用條件處理(邏輯運算)函數 */
                        if (sym == thensym)
        				{
                			getsymdo;
        				}
            			else
        				{
                            error(16);  /* 缺少then */
        				}
                        cx1 = cx;   /* 保存當前指令地址 */
                        gendo(jpc, 0, 0);   /* 生成條件跳轉指令,跳轉地址未知,暫時寫0 */
                        statementdo(fsys, ptx, lev);    /* 處理then后的語句 */
                        code[cx1].a = cx;   /* 經statement處理后,cx為then后語句執行完的位置,它正是前面未定的跳轉地址 */
        			}
            		else
        			{
                        if (sym == beginsym)    /* 準備按照復合語句處理 */
        				{
                			getsymdo;
                            memcpy(nxtlev, fsys, sizeof(bool)*symnum);
                            nxtlev[semicolon] = true;
                            nxtlev[endsym] = true;  /* 后跟符號為分號或end */
                            /* 循環調用語句處理函數,直到下一個符號不是語句開始符號或收到end */
                            statementdo(nxtlev, ptx, lev);

                            while (inset(sym, statbegsys) || sym==semicolon)
        					{
                                if (sym == semicolon)
            					{
                    				getsymdo;
            					}
            					else
            					{
                                    error(10);  /* 缺少分號 */
            					}
                                statementdo(nxtlev, ptx, lev);
        					}
                        	if(sym == endsym)
        					{
                    			getsymdo;
        					}
            				else
        					{
                                error(17);  /* 缺少end或分號 */
        					}
        				}
            			else
        				{
                            if (sym == whilesym)    /* 準備按照while語句處理 */
        					{
                                cx1 = cx;   /* 保存判斷條件操作的位置 */
                    			getsymdo;
                                memcpy(nxtlev, fsys, sizeof(bool)*symnum);
                                nxtlev[dosym] = true;   /* 后跟符號為do */
                                conditiondo(nxtlev, ptx, lev);  /* 調用條件處理 */
                                cx2 = cx;   /* 保存循環體的結束的下一個位置 */
                                gendo(jpc, 0, 0);   /* 生成條件跳轉,但跳出循環的地址未知 */
                            	if (sym == dosym)
            					{
                    				getsymdo;
            					}
            					else
            					{
                                    error(18);  /* 缺少do */
            					}
                                statementdo(fsys, ptx, lev);    /* 循環體 */
                                gendo(jmp, 0, cx1); /* 回頭重新判斷條件 */
                                code[cx2].a = cx;   /* 反填跳出循環的地址,與if類似 */
        					}
            				else
        					{
                                memset(nxtlev, 0, sizeof(bool)*symnum); /* 語句結束無補救集合 */
                                testdo(fsys, nxtlev, 19);   /* 檢測語句結束的正確性 */
        					}
        				}
        			}
        		}
    		}
    	}
    }
    return 0;
}

/*
* 表達式處理
*/
int expression(bool* fsys, int* ptx, int lev)
{
    enum symbol addop;  /* 用于保存正負號 */
    bool nxtlev[symnum];

    if(sym==plus || sym==minus) /* 開頭的正負號,此時當前表達式被看作一個正的或負的項 */
    {
        addop = sym;    /* 保存開頭的正負號 */
        getsymdo;
        memcpy(nxtlev, fsys, sizeof(bool)*symnum);
        nxtlev[plus] = true;
        nxtlev[minus] = true;
        termdo(nxtlev, ptx, lev);   /* 處理項 */
        if (addop == minus)
    	{
            gendo(opr,0,1); /* 如果開頭為負號生成取負指令 */
    	}
    }
    else    /* 此時表達式被看作項的加減 */
    {
        memcpy(nxtlev, fsys, sizeof(bool)*symnum);
        nxtlev[plus] = true;
        nxtlev[minus] = true;
        termdo(nxtlev, ptx, lev);   /* 處理項 */
    }
    while (sym==plus || sym==minus)
    {
        addop = sym;
        getsymdo;
        memcpy(nxtlev, fsys, sizeof(bool)*symnum);
        nxtlev[plus] = true;
        nxtlev[minus] = true;
        termdo(nxtlev, ptx, lev);   /* 處理項 */
        if (addop == plus)
    	{
            gendo(opr, 0, 2);   /* 生成加法指令 */
    	}
        else
    	{
            gendo(opr, 0, 3);   /* 生成減法指令 */
    	}
    }
    return 0;
}

/*
* 項處理
*/
int term(bool* fsys, int* ptx, int lev)
{
    enum symbol mulop;  /* 用于保存乘除法符號 */
    bool nxtlev[symnum];

    memcpy(nxtlev, fsys, sizeof(bool)*symnum);
    nxtlev[times] = true;
    nxtlev[slash] = true;
    factordo(nxtlev, ptx, lev); /* 處理因子 */
    while(sym==times || sym==slash)
    {
        mulop = sym;
        getsymdo;
        factordo(nxtlev, ptx, lev);
        if(mulop == times)
    	{
            gendo(opr, 0, 4);   /* 生成乘法指令 */
    	}
        else
    	{
            gendo(opr, 0, 5);   /* 生成除法指令 */
    	}
    }
    return 0;
}

/*
* 因子處理
*/
int factor(bool* fsys, int* ptx, int lev)
{
    int i;
    bool nxtlev[symnum];
    testdo(facbegsys, fsys, 24);    /* 檢測因子的開始符號 */
    /* while(inset(sym, facbegsys)) */  /* 循環直到不是因子開始符號 */
    if(inset(sym,facbegsys))    /* BUG: 原來的方法var1(var2+var3)會被錯誤識別為因子 */
    {
        if(sym == ident)    /* 因子為常量或變量 */
    	{
            i = position(id, *ptx); /* 查找名字 */
            if (i == 0)
    		{
                error(11);  /* 標識符未聲明 */
    		}
        	else
    		{
                switch (table[i].kind)
        		{
                case constant:  /* 名字為常量 */
                    gendo(lit, 0, table[i].val);    /* 直接把常量的值入棧 */
            		break;
                case variable:  /* 名字為變量 */
                    gendo(lod, lev-table[i].level, table[i].adr);   /* 找到變量地址并將其值入棧 */
            		break;
                case procedur:  /* 名字為過程 */
                    error(21);  /* 不能為過程 */
            		break;
        		}
    		}
            getsymdo;
    	}
        else
    	{
            if(sym == number)   /* 因子為數 */
    		{
                if (num > amax)
        		{
                	error(31);
                	num = 0;
        		}
                gendo(lit, 0, num);
                getsymdo;
    		}
        	else
    		{
                if (sym == lparen)  /* 因子為表達式 */
        		{
                	getsymdo;
                    memcpy(nxtlev, fsys, sizeof(bool)*symnum);
                    nxtlev[rparen] = true;
                    expressiondo(nxtlev, ptx, lev);
                    if (sym == rparen)
        			{
                		getsymdo;
        			}
            		else
        			{
                        error(22);  /* 缺少右括號 */
        			}
        		}
                testdo(fsys, facbegsys, 23);    /* 因子后有非法符號 */
    		}
    	}
    }
    return 0;
}

/*
* 條件處理
*/
int condition(bool* fsys, int* ptx, int lev)
{
    enum symbol relop;
    bool nxtlev[symnum];

    if(sym == oddsym)   /* 準備按照odd運算處理 */
    {
        getsymdo;
        expressiondo(fsys, ptx, lev);
        gendo(opr, 0, 6);   /* 生成odd指令 */
    }
    else
    {
        /* 邏輯表達式處理 */
        memcpy(nxtlev, fsys, sizeof(bool)*symnum);
        nxtlev[eql] = true;
        nxtlev[neq] = true;
        nxtlev[lss] = true;
        nxtlev[leq] = true;
        nxtlev[gtr] = true;
        nxtlev[geq] = true;
        expressiondo(nxtlev, ptx, lev);
        if (sym!=eql && sym!=neq && sym!=lss && sym!=leq && sym!=gtr && sym!=geq)
    	{
            error(20);
    	}
        else
    	{
            relop = sym;
            getsymdo;
            expressiondo(fsys, ptx, lev);
            switch (relop)
    		{
            case eql:
                gendo(opr, 0, 8);
            	break;
            case neq:
                gendo(opr, 0, 9);
            	break;
            case lss:
                gendo(opr, 0, 10);
            	break;
            case geq:
                gendo(opr, 0, 11);
            	break;
            case gtr:
                gendo(opr, 0, 12);
            	break;
            case leq:
                gendo(opr, 0, 13);
            	break;
    		}
    	}
    }
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品一区二区久久 | 国产一区福利在线| 成人午夜免费电影| 欧美一区二区日韩一区二区| 国产精品午夜电影| 免费一级欧美片在线观看| 不卡的av在线| 欧美白人最猛性xxxxx69交| 《视频一区视频二区| 国产精品自在在线| 欧美一区二区三区系列电影| 亚洲综合色区另类av| 不卡一区二区中文字幕| 久久久噜噜噜久噜久久综合| 日本一道高清亚洲日美韩| 91国产视频在线观看| 亚洲国产精品av| 国产福利一区在线| 日韩精品影音先锋| 男女男精品网站| 欧美日韩免费不卡视频一区二区三区| 日韩毛片一二三区| av影院午夜一区| 欧美高清在线精品一区| 国产一区二区在线看| 日韩精品中午字幕| 久久精品国产第一区二区三区| 欧美日韩的一区二区| 夜夜嗨av一区二区三区中文字幕| eeuss鲁片一区二区三区在线看| 国产欧美精品一区二区色综合 | 免费久久99精品国产| 欧美日本不卡视频| 亚洲一区二区三区美女| 欧美日韩精品欧美日韩精品一| 亚洲一二三四区| 欧美在线视频日韩| 亚洲国产精品一区二区久久恐怖片| 色噜噜偷拍精品综合在线| 亚洲色图制服丝袜| 欧美综合天天夜夜久久| 午夜欧美在线一二页| 这里只有精品电影| 久久国产麻豆精品| 国产网红主播福利一区二区| 床上的激情91.| 亚洲欧美日本在线| 欧美日韩卡一卡二| 极品瑜伽女神91| 国产精品麻豆视频| 91久久精品一区二区二区| 性做久久久久久免费观看| 91精品国产麻豆国产自产在线| 日本aⅴ免费视频一区二区三区 | 国产区在线观看成人精品 | 日韩欧美的一区| 国产一区二区三区不卡在线观看| 中文字幕精品三区| 欧美丝袜丝交足nylons图片| 天天综合色天天综合色h| 精品国产一区二区三区久久影院| 国产激情精品久久久第一区二区| 亚洲视频一区二区免费在线观看 | 911精品国产一区二区在线| 久久精品国产精品亚洲红杏| 国产精品国产自产拍高清av| 欧美无砖砖区免费| 国产一区二区中文字幕| 亚洲欧美激情在线| 精品国产91九色蝌蚪| 色综合一区二区三区| 蜜桃一区二区三区在线| 亚洲情趣在线观看| 久久综合九色综合欧美就去吻 | 欧美国产精品中文字幕| 欧美视频一二三区| 国产福利91精品一区| 午夜av区久久| 国产精品拍天天在线| 正在播放亚洲一区| 91在线一区二区| 另类综合日韩欧美亚洲| 亚洲精品国产高清久久伦理二区| 精品乱码亚洲一区二区不卡| 欧美亚洲综合色| 成人精品小蝌蚪| 奇米影视一区二区三区小说| 一区二区三区自拍| 久久综合九色综合97婷婷女人| 在线精品亚洲一区二区不卡| 国产成人免费视频一区| 老司机一区二区| 天天操天天综合网| 亚洲免费在线视频一区 二区| 久久精品夜夜夜夜久久| 日韩欧美国产成人一区二区| 欧美日韩精品是欧美日韩精品| 国产91精品露脸国语对白| 久久99热这里只有精品| 日韩激情视频在线观看| 亚洲卡通欧美制服中文| 国产精品激情偷乱一区二区∴| 久久你懂得1024| 精品欧美乱码久久久久久 | 日韩一级大片在线| 欧美日韩国产在线播放网站| 色婷婷久久久综合中文字幕| av在线播放成人| 99久久精品情趣| 99久久99久久免费精品蜜臀| 成人一区二区三区在线观看| 国产成人8x视频一区二区| 久草中文综合在线| 卡一卡二国产精品 | 91精品国产综合久久久久| 在线观看视频一区二区| 在线观看国产91| 欧美探花视频资源| 欧美日韩情趣电影| 欧美一区二区在线视频| 欧美一级理论性理论a| 欧美va亚洲va香蕉在线| 精品国产乱码久久久久久浪潮| xnxx国产精品| 国产欧美日韩亚州综合| 中文字幕在线一区免费| 亚洲人午夜精品天堂一二香蕉| 国产精品的网站| 亚洲一级不卡视频| 麻豆免费精品视频| 国产福利91精品一区二区三区| www.亚洲精品| 精品视频免费在线| 精品日韩99亚洲| 国产精品日产欧美久久久久| 一区二区三区中文字幕电影| 亚洲成av人片观看| 精品一区二区三区蜜桃| 高清国产一区二区| 91精品福利在线| 欧美一区二区精美| 国产精品久线在线观看| 亚洲午夜av在线| 国产一区二区三区久久悠悠色av| 成人久久18免费网站麻豆| 一本一道久久a久久精品综合蜜臀| 欧美日韩免费高清一区色橹橹| 精品少妇一区二区| 亚洲日本一区二区| 久久66热re国产| 色综合久久久久久久久| 欧美变态口味重另类| 亚洲欧美日韩久久精品| 美国十次了思思久久精品导航| proumb性欧美在线观看| 欧美一区二区三区啪啪| 中文字幕乱码一区二区免费| 日韩精品一区第一页| 9久草视频在线视频精品| 911国产精品| 一区在线中文字幕| 国内精品免费**视频| 欧美日韩在线播| 国产欧美日韩另类一区| 日韩av一二三| 91看片淫黄大片一级| 久久精品人人做人人爽97 | 中文字幕欧美三区| 日韩精品免费专区| 色偷偷成人一区二区三区91| 久久日韩精品一区二区五区| 亚洲第一成年网| 成人激情校园春色| 精品国产三级电影在线观看| 亚洲国产va精品久久久不卡综合| 成人网页在线观看| 久久婷婷国产综合国色天香| 首页亚洲欧美制服丝腿| 91污片在线观看| 中文字幕欧美激情一区| 黑人精品欧美一区二区蜜桃| 91精品在线麻豆| 亚洲一卡二卡三卡四卡| 91蜜桃婷婷狠狠久久综合9色| 久久久一区二区三区| 蜜臀av一区二区在线观看| 欧美日韩一区高清| 亚洲午夜久久久久久久久电影网 | 国产激情视频一区二区在线观看| 在线观看国产一区二区| 国产日韩影视精品| 精品系列免费在线观看| 欧美一卡二卡三卡| 五月激情综合婷婷| 欧美日韩国产高清一区二区三区 | 欧美日韩国产精选| 亚洲综合男人的天堂| 色婷婷av一区二区三区gif| 亚洲欧洲精品一区二区精品久久久| 国产精品一区二区你懂的|