徐 偉,劉 碩,張 昱
(中國(guó)科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230027)
編譯原理是計(jì)算機(jī)學(xué)科的一門重要專業(yè)課,是列入國(guó)際ACM和IEEE計(jì)算機(jī)學(xué)科的主干課程,同時(shí)也是計(jì)算機(jī)專業(yè)課程中難度較大且非常挑戰(zhàn)學(xué)習(xí)能力的課程之一[1-4]。當(dāng)前,國(guó)內(nèi)大力發(fā)展自主可控的核心技術(shù),學(xué)校也應(yīng)相應(yīng)地加強(qiáng)學(xué)生計(jì)算機(jī)系統(tǒng)能力培養(yǎng),而學(xué)好學(xué)精編譯技術(shù)是培養(yǎng)大學(xué)生計(jì)算機(jī)系統(tǒng)能力的重要環(huán)節(jié)之一。編譯原理課程目標(biāo)不僅讓學(xué)生對(duì)程序設(shè)計(jì)語(yǔ)言的理論和實(shí)現(xiàn)技術(shù)有深刻的理解,更重要的是結(jié)合課程實(shí)踐,使學(xué)生初步積累規(guī)模較大軟件的開(kāi)發(fā)經(jīng)驗(yàn),并能將課程討論的概念和技術(shù)運(yùn)用到軟件設(shè)計(jì)、開(kāi)發(fā)及科研工作中[5-9]。中國(guó)科學(xué)技術(shù)大學(xué)編譯原理課程教學(xué)所秉持的理念是遵循科教融合原則,將科學(xué)研究和教學(xué)研究中積累的經(jīng)驗(yàn)不斷融入課堂理論教學(xué)。實(shí)踐教學(xué)是課堂理論教學(xué)的試驗(yàn)田,是訓(xùn)練學(xué)生系統(tǒng)能力和創(chuàng)新能力的必然途徑,是“兩性一度”的最好體現(xiàn)[10-12]。
雖然編譯課程是中國(guó)科學(xué)技術(shù)大學(xué)計(jì)算機(jī)專業(yè)核心課程,但是從教學(xué)中發(fā)現(xiàn)學(xué)生的學(xué)習(xí)熱情并不高、系統(tǒng)能力和創(chuàng)新能力鍛煉不足。興趣缺失的原因包括教學(xué)內(nèi)容的迭代更新不足,國(guó)內(nèi)外教學(xué)普遍參考的《編譯原理》教材已經(jīng)長(zhǎng)達(dá)13年沒(méi)有更新,而編譯技術(shù)發(fā)展方興未艾,落后于新時(shí)代技術(shù)發(fā)展趨勢(shì)的教學(xué)內(nèi)容,無(wú)法滿足新一代學(xué)生對(duì)新知識(shí)的渴望與訴求。對(duì)于系統(tǒng)能力和創(chuàng)新能力不足,課題組分析其原因主要在于,國(guó)內(nèi)外普遍使用的簡(jiǎn)易實(shí)驗(yàn)體系無(wú)法體現(xiàn)系統(tǒng)復(fù)雜性,在工程量和挑戰(zhàn)度上沒(méi)有得到保證,導(dǎo)致學(xué)生們的能力鍛煉不足。為了讓學(xué)生更好地掌握現(xiàn)代編譯器設(shè)計(jì)原理,提高學(xué)習(xí)興趣,加強(qiáng)系統(tǒng)和創(chuàng)新能力培養(yǎng),中國(guó)科學(xué)技術(shù)大學(xué)編譯原理課程組專門設(shè)計(jì)了一套項(xiàng)目型的教學(xué)實(shí)驗(yàn)方案。該實(shí)驗(yàn)方案適用于計(jì)算機(jī)專業(yè)的本科生、研究生,以及希望開(kāi)展編譯學(xué)習(xí)的相關(guān)技術(shù)人員。需要注意的是,相較于傳統(tǒng)的編譯實(shí)驗(yàn),該實(shí)驗(yàn)方案適合已經(jīng)對(duì)編譯原理有初步了解的學(xué)生選修,而非作為學(xué)生的入門課程。實(shí)驗(yàn)方案設(shè)計(jì)上將整個(gè)LLVM作為外部庫(kù)進(jìn)行調(diào)用,通過(guò)自研的編譯驅(qū)動(dòng)框架和程序分析示例,聚焦了技術(shù)發(fā)展方向,降低門檻并貼近業(yè)界前沿。通過(guò)實(shí)驗(yàn)方案的使用,讓學(xué)生可以設(shè)計(jì)并實(shí)現(xiàn)出一個(gè)實(shí)際的編譯器,而不僅僅是“玩具型”的功能驗(yàn)證。該實(shí)驗(yàn)方案在2020年秋季學(xué)期編譯原理和技術(shù)課程中進(jìn)行了首次教學(xué)實(shí)踐,學(xué)生在完成常規(guī)編譯實(shí)驗(yàn)(詞法分析器實(shí)驗(yàn)、語(yǔ)法分析器實(shí)驗(yàn)、語(yǔ)義檢查實(shí)驗(yàn)等)后,繼續(xù)進(jìn)行這種進(jìn)階實(shí)驗(yàn),取得了較好的實(shí)驗(yàn)效果。實(shí)驗(yàn)方案基于開(kāi)源編譯器LLVM進(jìn)行設(shè)計(jì),LLVM編譯器[13]的特點(diǎn)是設(shè)計(jì)上高度模塊化、可復(fù)用、易擴(kuò)展、開(kāi)源,并且采取Apache許可方式,工業(yè)界可以自由地在其上進(jìn)行相關(guān)開(kāi)發(fā)。
基于LLVM進(jìn)行實(shí)驗(yàn)方案設(shè)計(jì),最主要的挑戰(zhàn)就是LLVM超高的技術(shù)門檻。LLVM作為具有千萬(wàn)行代碼級(jí)別的C++項(xiàng)目,使用了很多C++新特性,且項(xiàng)目本身也在不斷的快速發(fā)展,目前大約每3個(gè)月就會(huì)更新一次版本[14],LLVM的這些顯著特點(diǎn)導(dǎo)致其本身入手門檻很高[15-16]。為了解決學(xué)生在較短的課程實(shí)驗(yàn)中掌握并運(yùn)用LLVM進(jìn)行編譯器設(shè)計(jì),需要在實(shí)驗(yàn)方案設(shè)計(jì)上,既考慮降低實(shí)驗(yàn)門檻難度,又能兼顧現(xiàn)代編譯器設(shè)計(jì)特點(diǎn)的展示。課程組針對(duì)性地開(kāi)發(fā)了LLVM驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序通過(guò)使用Clang/LLVM應(yīng)用編程接口,將LLVM相關(guān)模塊作為外部庫(kù)進(jìn)行調(diào)用,實(shí)現(xiàn)對(duì)輸入的源程序文件的解析,產(chǎn)生AST、LLVM IR等中間表示,并在這些中間表示上開(kāi)展程序分析和變換。
實(shí)驗(yàn)內(nèi)容總體設(shè)計(jì)思路如圖1所示,實(shí)驗(yàn)分為程序理解、示例代碼問(wèn)答、代碼開(kāi)發(fā)、擴(kuò)展實(shí)驗(yàn)4個(gè)層次,難度層層遞進(jìn),共同組成一個(gè)相對(duì)完整的系列實(shí)驗(yàn)方案。通過(guò)以上4個(gè)層次的系列實(shí)驗(yàn),讓學(xué)生完成會(huì)、能、通3個(gè)理解層次的逐漸深入,從而理解領(lǐng)會(huì)現(xiàn)代編譯器的設(shè)計(jì)特點(diǎn)。
Fig.1 Overall design of the experimental content圖1 實(shí)驗(yàn)內(nèi)容總體設(shè)計(jì)思路
該類實(shí)驗(yàn)要求學(xué)員學(xué)習(xí)并理解LLVM驅(qū)動(dòng)程序框架;掌握調(diào)用LLVM相關(guān)模塊產(chǎn)生多種中間表示的過(guò)程;理解驅(qū)動(dòng)框架多種中間表示分析遍的構(gòu)建。自研的LLVM驅(qū)動(dòng)程序框架如圖2所示,通過(guò)該驅(qū)動(dòng)框架可以簡(jiǎn)化LLVM應(yīng)用編程接口,掌握不同層次的中間表示,并易于實(shí)現(xiàn)學(xué)生自定義的程序分析遍。
Fig.2 LLVM driver framework圖2 LLVM驅(qū)動(dòng)程序框架
該類實(shí)驗(yàn)要求學(xué)員學(xué)習(xí)使用LLVM驅(qū)動(dòng)程序框架,并理解其中針對(duì)AST的查找回邊分析遍和針對(duì)LLVM IR的除零檢查分析遍。掌握兩種不同分析遍的組織形式、調(diào)用方式、處理過(guò)程,并完成相關(guān)問(wèn)答。該類實(shí)驗(yàn)的意義在于通過(guò)問(wèn)答實(shí)驗(yàn),讓學(xué)生理解不同中間表示的特點(diǎn)和應(yīng)用范圍,讓學(xué)生逐步通過(guò)使用懂得并能對(duì)相應(yīng)問(wèn)題進(jìn)行回答和解決。
該類實(shí)驗(yàn)是在上述基礎(chǔ)上進(jìn)一步提高,讓學(xué)生完成指定功能的設(shè)計(jì)與代碼開(kāi)發(fā)。
實(shí)驗(yàn)第一步,要求學(xué)生理解在現(xiàn)代編譯器中控制流分析的相關(guān)知識(shí)(支配、支配關(guān)系),以及利用支配關(guān)系尋找循環(huán)等基礎(chǔ)知識(shí)。由于技術(shù)的不斷進(jìn)步,現(xiàn)代編譯器往往不會(huì)簡(jiǎn)單使用書(shū)本介紹的算法,而是采用更加高效的算法完成相關(guān)控制流分析。例如在支配樹(shù)計(jì)算中,實(shí)驗(yàn)內(nèi)容會(huì)涉及LLVM在2017年以前的Lengauer-Tarjan算法[17],以及2017年之后的Semi-NCA算法[18]。通過(guò)相關(guān)算法介紹,讓學(xué)生學(xué)會(huì)識(shí)別相應(yīng)的循環(huán),并感受到技術(shù)進(jìn)步帶來(lái)的改變,激發(fā)學(xué)生的科研興趣。
第二步要求學(xué)生圍繞上述知識(shí)點(diǎn),實(shí)現(xiàn)統(tǒng)計(jì)循環(huán)分析功能。學(xué)生可以根據(jù)LLVM提供的接口創(chuàng)建程序的控制流圖,生成支配樹(shù)和回邊信息,通過(guò)回邊信息快速識(shí)別循環(huán)。傳統(tǒng)的循環(huán)識(shí)別使用Tarjan算法查找強(qiáng)連通分量,在該步驟通過(guò)實(shí)際現(xiàn)狀對(duì)比,讓學(xué)生理解到傳統(tǒng)Tarjan算法的優(yōu)劣點(diǎn)。
為了讓學(xué)生可以更好地進(jìn)行功能調(diào)用,驅(qū)動(dòng)框架代碼已經(jīng)對(duì)常用接口完成了包裝。通過(guò)引導(dǎo)學(xué)生使用LLVM的相應(yīng)接口,讓學(xué)生了解到循環(huán)識(shí)別過(guò)程,同時(shí)可以讓學(xué)生接觸到業(yè)界前沿的產(chǎn)品級(jí)編譯器的具體實(shí)現(xiàn)方式。
擴(kuò)展實(shí)驗(yàn)屬于第4個(gè)層次實(shí)驗(yàn),通過(guò)讓學(xué)生按照小組自行選擇相應(yīng)的題目,包括Clang靜態(tài)分析器閱讀實(shí)驗(yàn)、基于LLVM IR的更多數(shù)據(jù)流分析和優(yōu)化實(shí)驗(yàn),也可以讓學(xué)生在此基礎(chǔ)上進(jìn)行自由發(fā)揮。
本實(shí)驗(yàn)基于LLVM 11.0.0版本進(jìn)行設(shè)計(jì),具體軟件實(shí)驗(yàn)環(huán)境如表1所示,實(shí)驗(yàn)框架已共享在https://gitee.com/s4plus/llvm-ustc-proj/tree/master/my-llvm-driver,學(xué)生代碼也基于Gitee等開(kāi)源倉(cāng)庫(kù)進(jìn)行管理和共享[19]。實(shí)驗(yàn)涉及到對(duì)LLVM源碼的Debug調(diào)試,由于LLVM調(diào)試版本資源消耗巨大,超過(guò)一般計(jì)算機(jī)配置,課程組提供在線的LLVM調(diào)試服務(wù)器(lenovo System X 3650 M5),并為每個(gè)學(xué)生分配了在線賬號(hào),學(xué)生可以通過(guò)在線方式,遠(yuǎn)程完成代碼調(diào)試。在實(shí)驗(yàn)進(jìn)行過(guò)程中提供在線討論平臺(tái),學(xué)生在線進(jìn)行實(shí)驗(yàn)問(wèn)答和討論。
Table 1 Experiment environment表1 實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)組織上一般3~4人分為一組,由組長(zhǎng)協(xié)調(diào)各組員進(jìn)行資料查詢、工程實(shí)踐和實(shí)驗(yàn)匯報(bào)等工作。通過(guò)分組完成系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),培養(yǎng)團(tuán)隊(duì)協(xié)作開(kāi)發(fā)和項(xiàng)目管理能力,在分工、設(shè)計(jì)、實(shí)現(xiàn)、報(bào)告等環(huán)節(jié)訓(xùn)練協(xié)調(diào)配合能力。通過(guò)組內(nèi)討論、調(diào)研報(bào)告、驗(yàn)收?qǐng)?bào)告等方式培養(yǎng)專業(yè)相關(guān)的表達(dá)能力。
考核方式包括實(shí)驗(yàn)效果考核、小組答辯兩部分。實(shí)驗(yàn)效果考核由助教對(duì)各組的實(shí)驗(yàn)效果進(jìn)行確認(rèn),判斷是否通過(guò)本次實(shí)驗(yàn);小組答辯包括各組對(duì)實(shí)驗(yàn)的匯報(bào)答辯,評(píng)委由學(xué)生、助教和教師組成。評(píng)委對(duì)答辯人進(jìn)行提問(wèn),并分別完成各組的答辯排名,最終答辯成績(jī)由各組的答辯排名和教師評(píng)分共同確定。
在2020年秋季學(xué)期,學(xué)生們組成9支隊(duì)伍合作完成必做和選做部分。在選題環(huán)節(jié),有4支隊(duì)伍選擇了“Clang靜態(tài)分析的理解與實(shí)踐”題目,有兩只隊(duì)伍選擇了“數(shù)據(jù)流分析”題目,還有另外3支隊(duì)伍選擇了“MLIR Toy的理解與實(shí)踐”這一基于更高層次的編譯系統(tǒng)框架-MLIR的題目。9支隊(duì)伍的學(xué)生們緊密合作,最后都實(shí)現(xiàn)了必做部分對(duì)于識(shí)別程序循環(huán)嵌套深度的要求,也都基本完成了選做題目的要求,并且部分隊(duì)伍主動(dòng)深入LLVM框架內(nèi)部,在對(duì)LLVM源碼進(jìn)行大量閱讀的基礎(chǔ)上,實(shí)現(xiàn)了高效的分析優(yōu)化或語(yǔ)義檢查功能模塊。實(shí)驗(yàn)結(jié)束環(huán)節(jié),各小組進(jìn)行了公開(kāi)答辯,其答辯視頻共享在https://space.bilibili.com/273391839/。
在評(píng)分環(huán)節(jié),對(duì)各小組進(jìn)行內(nèi)容完整度、答辯現(xiàn)場(chǎng)表現(xiàn)和參與度打分,評(píng)分由學(xué)生、教師和助教分別給出,最后按照權(quán)值合并。對(duì)于必做部分,有兩個(gè)小組的算法完整度、識(shí)別準(zhǔn)確度更高,獲得滿分;選做部分有6個(gè)小組獲得優(yōu)秀,3個(gè)小組獲得良好,總體完成效果良好。課后對(duì)學(xué)生進(jìn)行了相關(guān)調(diào)研,學(xué)生反映該實(shí)驗(yàn)方案難度逐層遞進(jìn),有助于他們了解了現(xiàn)代編譯器的發(fā)展方向,對(duì)系統(tǒng)能力和創(chuàng)新能力培養(yǎng)有積極效果。
由于綜合實(shí)驗(yàn)文檔齊全,相關(guān)步驟列舉也比較詳細(xì),學(xué)生們對(duì)于這一部分的反饋整體而言較為積極。根據(jù)后期收集的問(wèn)卷,對(duì)該實(shí)驗(yàn)給出肯定評(píng)價(jià)的原因主要包括如下幾點(diǎn):①很多學(xué)生認(rèn)為該實(shí)驗(yàn)引入了LLVM Driver、LLVM IR等LLVM中的重要核心類,對(duì)于他們深入理解LLVM的相關(guān)機(jī)制起到了很大的幫助作用;②本實(shí)驗(yàn)設(shè)計(jì)的重點(diǎn)是在LLVM IR上優(yōu)化分析Pass,省去了從抽象語(yǔ)法樹(shù)構(gòu)造LLVM IR的龐大工作量,使得學(xué)生們可以集中精力專注于實(shí)現(xiàn)代碼的優(yōu)化;③選題內(nèi)容不設(shè)限制,學(xué)生們可以根據(jù)自己的興趣完成不同的內(nèi)容,并且配備了足夠多的助教(3名),助教有足夠的時(shí)間和能力給予指導(dǎo)。
通過(guò)問(wèn)卷調(diào)查,也有學(xué)生反映存在以下問(wèn)題待改進(jìn):①最終答辯環(huán)節(jié),選題不同的組之間對(duì)于彼此的題目互相了解較少,匯報(bào)前對(duì)于其他選題的內(nèi)容要補(bǔ)充閱讀相關(guān)文檔才能了解其他人的內(nèi)容,最后答辯時(shí)的提問(wèn)和討論有些局限,難以展開(kāi);②個(gè)別組之間的選題有重疊部分,沒(méi)有充分?jǐn)U展到各細(xì)分領(lǐng)域內(nèi),如選擇“數(shù)據(jù)流分析”的組不約而同都去實(shí)現(xiàn)基于循環(huán)的代碼變化,而對(duì)于過(guò)程間優(yōu)化、并行優(yōu)化等均未涉及。
實(shí)驗(yàn)過(guò)程中,課程組還觀察到學(xué)生們?nèi)菀状嬖谡{(diào)研不充分、對(duì)LLVM框架及其相關(guān)接口掌握不完全、對(duì)實(shí)際代碼中可能存在的計(jì)算或漏洞模式不甚了解、對(duì)于編譯技術(shù)領(lǐng)域的分析技術(shù)缺少認(rèn)識(shí)等問(wèn)題,進(jìn)而可能會(huì)導(dǎo)致開(kāi)發(fā)進(jìn)度緩慢、重復(fù)造輪子、難以實(shí)現(xiàn)有效的優(yōu)化或檢查等問(wèn)題。有的學(xué)生在分析課題時(shí),由于對(duì)過(guò)程間調(diào)用分析、函數(shù)簽名等高階的程序分析相關(guān)概念并不了解,感覺(jué)到難以入手,始終無(wú)法確定合適的分析方法。最后,該課程組學(xué)生主動(dòng)聯(lián)系教師和助教,利用一個(gè)下午的時(shí)間補(bǔ)充足夠的背景知識(shí),確定了實(shí)現(xiàn)的技術(shù)路線,在程序的過(guò)程調(diào)用圖上,利用函數(shù)簽名和數(shù)據(jù)流分析相關(guān)技術(shù),傳播文件指針狀態(tài),最終達(dá)到了檢查文件指針安全性的目的。
針對(duì)上述教學(xué)反饋,課程組認(rèn)為后續(xù)在實(shí)驗(yàn)組織上可以進(jìn)行如下改進(jìn):
(1)設(shè)計(jì)合理的實(shí)驗(yàn)時(shí)間。由于編譯實(shí)驗(yàn)的工作量一般都較大,需要教師和助教合理安排各實(shí)驗(yàn)的截止時(shí)間節(jié)點(diǎn),避免實(shí)驗(yàn)的集中發(fā)布與提交,也避免實(shí)驗(yàn)發(fā)布時(shí)間與本課程或其他課程的重要時(shí)間節(jié)點(diǎn)沖突。通過(guò)這種方式,適當(dāng)減輕該實(shí)驗(yàn)給學(xué)生帶來(lái)的課程壓力。
(2)提高答辯討論的效果。每一個(gè)被選擇的選題,可以根據(jù)各組中期提交情況,采取擇優(yōu)挑選或者自愿報(bào)名的方式選出一個(gè)組,提前介紹該組的課題背景及調(diào)研結(jié)果,學(xué)生們可以單就選題背景等相關(guān)問(wèn)題在本次交流中進(jìn)行討論。這樣既有利于最終答辯報(bào)告的充分展開(kāi),又給各組學(xué)生以充分的思考和理解時(shí)間,對(duì)最后的討論交流起到較好幫助。此外,答辯組還需要介紹各自組內(nèi)工作分工和工作內(nèi)容比例,以此防止出現(xiàn)“抱大腿”情況。
(3)增加選題方向的獨(dú)特性。選題結(jié)束后,助教可以根據(jù)各組選題情況,讓各組的學(xué)生及時(shí)更新和修正本組的優(yōu)化方向,避免方向上重合度較高的研究?jī)?nèi)容。
在驅(qū)動(dòng)框架本身,課程組后續(xù)也有以下改進(jìn)方向:①目前驅(qū)動(dòng)框架可以完成將源文件解析為L(zhǎng)LVM IR Module,并完成分析Pass的顯示,后續(xù)可增加后端處理(代碼生成)等方面的功能,進(jìn)一步豐富驅(qū)動(dòng)框架覆蓋的實(shí)驗(yàn)范圍;②對(duì)驅(qū)動(dòng)框架可以解析的輸入源文件的數(shù)量由現(xiàn)有的單個(gè)文件提升到多個(gè)文件,讓驅(qū)動(dòng)框架適應(yīng)于對(duì)于較大工程文件的解析和分析;③針對(duì)學(xué)生對(duì)于LLVM框架的不熟悉,編寫(xiě)專門的示例說(shuō)明程序和相關(guān)技術(shù)文檔,提高學(xué)生自學(xué)效率。
本文在編譯實(shí)踐教學(xué)中引入正在革新演變中的新興編譯器LLVM,將其作為課堂理論教學(xué)的重要補(bǔ)充,并形成較為完整的實(shí)踐方案。在傳統(tǒng)編譯實(shí)驗(yàn)的基礎(chǔ)上,增加新的實(shí)踐方案,培養(yǎng)學(xué)生調(diào)研及掌握新開(kāi)發(fā)工具的能力,激發(fā)學(xué)生學(xué)習(xí)的熱情,加強(qiáng)其創(chuàng)新能力培養(yǎng)。通過(guò)實(shí)驗(yàn)的實(shí)施有效促進(jìn)了學(xué)生對(duì)于相關(guān)軟件工具的學(xué)習(xí)掌握。在實(shí)驗(yàn)過(guò)程中,學(xué)生需要掌握軟件工程方法和工具(如Git版本管理、構(gòu)建工具make或cmake、互聯(lián)網(wǎng)代碼倉(cāng)庫(kù)GitHub和文檔倉(cāng)庫(kù)GitBook等共享和協(xié)同工具)以及C/C++等語(yǔ)言的新特性和編程庫(kù)[20]。此外,學(xué)生基于LLVM驅(qū)動(dòng)程序進(jìn)行實(shí)驗(yàn),更有效地利用了實(shí)驗(yàn)時(shí)間,減少在詞法分析、語(yǔ)法分析等基礎(chǔ)性實(shí)驗(yàn)的時(shí)間投入,直接集中精力進(jìn)行AST、LLVM IR的分析與優(yōu)化,通過(guò)優(yōu)化編譯器實(shí)驗(yàn),更好地理解現(xiàn)代編譯器的發(fā)展方向。并且,LLVM驅(qū)動(dòng)框架程序給了學(xué)生學(xué)習(xí)LLVM的切入點(diǎn),驅(qū)動(dòng)框架程序可以像一把鑰匙讓學(xué)生更有針對(duì)性開(kāi)展實(shí)驗(yàn),提高了學(xué)生對(duì)LLVM源代碼的閱讀和調(diào)試效率,有助于他們更好地理解現(xiàn)代編譯器的架構(gòu)和特點(diǎn)。課程組已將相關(guān)實(shí)驗(yàn)架構(gòu)、答辯錄像等材料在網(wǎng)絡(luò)上進(jìn)行公開(kāi),方便有需要的教師參考和交流。2021年,CCF中國(guó)軟件大會(huì)舉辦的軟件工程教學(xué)案例交流與競(jìng)賽中,本實(shí)驗(yàn)方案榮獲一等獎(jiǎng),得到眾多專家好評(píng)。課程組后續(xù)將根據(jù)教學(xué)反饋,持續(xù)優(yōu)化實(shí)踐方案,促進(jìn)編譯原理教學(xué)質(zhì)量的進(jìn)一步提升。