PL/0簡(jiǎn)單編譯系統(tǒng)(零)

本學(xué)期修了《編譯原理》這門課嚎货。課程大作業(yè)是實(shí)現(xiàn)一個(gè)PL/0編譯器。接下來(lái)將記錄在實(shí)現(xiàn)過(guò)程中的心得蔫浆、遇到的問(wèn)題和解決辦法殖属,如有錯(cuò)誤之處,歡迎指正克懊。

PL/0語(yǔ)言描述

PL/0型語(yǔ)言是Pascal語(yǔ)言的一個(gè)子集。作為一門教學(xué)用程序設(shè)計(jì)語(yǔ)言七蜘,它比PASCAL語(yǔ)言簡(jiǎn)單谭溉,并作了一些限制。PL0的程序結(jié)構(gòu)比較完全橡卤,相應(yīng)的選擇扮念,不但有常量,變量及過(guò)程聲明碧库,而且分支和循環(huán)結(jié)構(gòu)也是一應(yīng)俱全柜与。

PL/0文法的EBNF表示如下:

<程序> ::= <分程序>.
<分程序> ::= [<常量說(shuō)明部分>][變量說(shuō)明部分>][<過(guò)程說(shuō)明部分>]<語(yǔ)句>
<常量說(shuō)明部分> ::= const<常量定義>{,<常量定義>};
<常量定義> ::= <標(biāo)識(shí)符>=<無(wú)符號(hào)整數(shù)>
<無(wú)符號(hào)整數(shù)> ::= <數(shù)字>{<數(shù)字>}
<標(biāo)識(shí)符> ::= <字母>{<字母>|<數(shù)字>}
<變量說(shuō)明部分>::= var<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>};
<過(guò)程說(shuō)明部分> ::= <過(guò)程首部><分程序>;{<過(guò)程說(shuō)明部分>}
<過(guò)程首部> ::= procedure<標(biāo)識(shí)符>;
<語(yǔ)句> ::= <賦值語(yǔ)句>|<條件語(yǔ)句>|<當(dāng)型循環(huán)語(yǔ)句>|<過(guò)程調(diào)用語(yǔ)句>|<讀語(yǔ)句>|<寫語(yǔ)句>|<復(fù)合語(yǔ)句>|<重復(fù)語(yǔ)句>|<空>
<賦值語(yǔ)句> ::= <標(biāo)識(shí)符>:=<表達(dá)式>
<表達(dá)式> ::= [+|-]<項(xiàng)>{<加法運(yùn)算符><項(xiàng)>}
<項(xiàng)> ::= <因子>{<乘法運(yùn)算符><因子>}
<因子> ::= <標(biāo)識(shí)符>|<無(wú)符號(hào)整數(shù)>|'('<表達(dá)式>')‘
<加法運(yùn)算符> ::= +|-
<乘法運(yùn)算符> ::= *|/
<條件> ::= <表達(dá)式><關(guān)系運(yùn)算符><表達(dá)式>|odd<表達(dá)式>
<關(guān)系運(yùn)算符> ::= =|<>|<|<=|>|>=
<條件語(yǔ)句> ::= if<條件>then<語(yǔ)句>[else<語(yǔ)句>]
<當(dāng)型循環(huán)語(yǔ)句> ::= while<條件>do<語(yǔ)句>
<過(guò)程調(diào)用語(yǔ)句> ::= call<標(biāo)識(shí)符>
<復(fù)合語(yǔ)句> ::= begin<語(yǔ)句>{;<語(yǔ)句>}end
<重復(fù)語(yǔ)句> ::= repeat<語(yǔ)句>{;<語(yǔ)句>}until<條件>
<讀語(yǔ)句> ::= read'('<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>}')‘
<寫語(yǔ)句> ::= write'('<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>}')‘
<字母> ::= a|b|...|X|Y|Z
<數(shù)字> ::= 0|1|2|...|8|9

實(shí)現(xiàn)效果

運(yùn)行界面

項(xiàng)目整個(gè)界面分為導(dǎo)航欄巧勤,代碼區(qū),token表區(qū)弄匕,符號(hào)表區(qū)颅悉,Pcode區(qū)以及控制臺(tái)。各分區(qū)的功能如下:

分區(qū) 功能
導(dǎo)航欄 打開(kāi)迁匠,關(guān)閉或保存文件剩瓶;編譯和執(zhí)行代碼
代碼區(qū) 展示并編輯代碼
Token表區(qū) 展示代碼中的token
Symbol表區(qū) 展示代碼編譯過(guò)程中生成的symbol表
Pcode表區(qū) 展示代碼生成的所有Pcode
控制臺(tái) 輸出編譯信息

相關(guān)代碼在shiyi001的PL/0編譯器,運(yùn)行環(huán)境為JRE1.8

NEXT ONE: PL/0簡(jiǎn)單編譯系統(tǒng)(一)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末城丧,一起剝皮案震驚了整個(gè)濱河市延曙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亡哄,老刑警劉巖枝缔,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚊惯,居然都是意外死亡愿卸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門拣挪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擦酌,“玉大人,你說(shuō)我怎么就攤上這事菠劝∩薏埃” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵赶诊,是天一觀的道長(zhǎng)笼平。 經(jīng)常有香客問(wèn)我,道長(zhǎng)舔痪,這世上最難降的妖魔是什么寓调? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮锄码,結(jié)果婚禮上夺英,老公的妹妹穿的比我還像新娘。我一直安慰自己滋捶,他們只是感情好痛悯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著重窟,像睡著了一般载萌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天扭仁,我揣著相機(jī)與錄音垮衷,去河邊找鬼。 笑死乖坠,一個(gè)胖子當(dāng)著我的面吹牛搀突,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓤帚,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼描姚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了戈次?” 一聲冷哼從身側(cè)響起轩勘,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怯邪,沒(méi)想到半個(gè)月后绊寻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悬秉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年澄步,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片和泌。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡村缸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出武氓,到底是詐尸還是另有隱情梯皿,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布县恕,位于F島的核電站东羹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忠烛。R本人自食惡果不足惜属提,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望美尸。 院中可真熱鬧冤议,春花似錦、人聲如沸师坎。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屹耐。三九已至尸疆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惶岭,已是汗流浹背寿弱。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留按灶,地道東北人症革。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸯旁,于是被迫代替她去往敵國(guó)和親噪矛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理铺罢,服務(wù)發(fā)現(xiàn)艇挨,斷路器,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 一韭赘、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問(wèn)題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,784評(píng)論 0 27
  • 毫無(wú)意外 一早起來(lái)上廁所 外面真的在下雨 而且還不小 這該腫么辦啊 摸摸膝蓋還痛 撈起來(lái)看 都淤青腫了 但是走路感...
    jenffy閱讀 368評(píng)論 0 0
  • 今年八月我正式步入高中殿堂泉瞻,脫離了初中時(shí)的稚氣脉漏。我聽(tīng)其他學(xué)姐學(xué)長(zhǎng)們說(shuō)到高中個(gè)個(gè)都是非常的痛苦,當(dāng)然我也沒(méi)抱多大...
    王若欣閱讀 581評(píng)論 7 3
  • 小時(shí)候袖牙,和家人鬧別扭侧巨,似乎話語(yǔ)越惡毒越能顯示自己的能耐。長(zhǎng)大后鞭达,在外邊受到的所有不公司忱,似乎都成為攻擊對(duì)方的借口,并...
    青杏路涂閱讀 180評(píng)論 2 2