趙銀亮,戴慧珺,李 昊,李 波
(西安交通大學(xué) 電子與信息工程學(xué)院,陜西 西安 710049)
編譯原理課程由來(lái)已久,至今仍然是計(jì)算機(jī)專業(yè)主干課程。筆者經(jīng)過(guò)長(zhǎng)期的教學(xué)實(shí)踐,觀察到與本課程有關(guān)的教學(xué)問(wèn)題,概括為以下四個(gè)。
問(wèn)題一:現(xiàn)有的編譯原理課程在內(nèi)容上存在理論完整性不足,使學(xué)生產(chǎn)生“知其然不知其所以然”的困惑。編譯原理課程中介紹程序分析變換和優(yōu)化技術(shù)的部分,涉及程序語(yǔ)言理論和大量具體方法,從教學(xué)方法上有強(qiáng)調(diào)理論性和強(qiáng)調(diào)技術(shù)實(shí)現(xiàn)兩個(gè)極端[1]。為了降低課程難度,授課教師一般直接使用形式語(yǔ)言理論的相關(guān)結(jié)論來(lái)解決詞法和語(yǔ)法分析問(wèn)題,課程并不覆蓋形式語(yǔ)言理論,結(jié)果造成課程所包含的理論內(nèi)容不夠完整。
問(wèn)題二:對(duì)于編譯原理課程在課程體系中的地位存在著不同觀點(diǎn),讓課程體系設(shè)計(jì)者陷入決策困境。這里羅列一些觀點(diǎn):編譯原理是最有價(jià)值的課程之一[2],課程太抽象、難度太大[3],對(duì)開(kāi)設(shè)該課程的必要性存在質(zhì)疑[4-5],該課程是其他課程的綜合練習(xí)[2],等。這些觀點(diǎn)導(dǎo)致編譯原理課程的開(kāi)設(shè)與不開(kāi)設(shè)都在兩可之間,且實(shí)際情況也是如此。
問(wèn)題三:編譯原理課程雖然屬于計(jì)算機(jī)科學(xué)基礎(chǔ)理論范疇,但一般沒(méi)有在大學(xué)前兩個(gè)學(xué)年的課程中出現(xiàn),影響了計(jì)算機(jī)專業(yè)學(xué)生對(duì)于基礎(chǔ)理論的掌握。通常認(rèn)為,大學(xué)前兩年是基礎(chǔ)理論學(xué)習(xí)和綜合素質(zhì)培養(yǎng)階段,如西安交通大學(xué)的“2+4+X”模式等。在課程體系設(shè)計(jì)中,前兩年的候選課程很多,但沒(méi)有編譯原理課程,導(dǎo)致計(jì)算機(jī)專業(yè)學(xué)生基礎(chǔ)理論的掌握減弱,不利于后續(xù)專業(yè)課程的學(xué)習(xí)和能力培養(yǎng)。
問(wèn)題四:在學(xué)科快速發(fā)展和課程學(xué)時(shí)數(shù)被壓縮這一背景下,與其他課程內(nèi)容重疊問(wèn)題變得日益明顯。目前,計(jì)算機(jī)學(xué)科知識(shí)構(gòu)成呈現(xiàn)多樣化趨勢(shì),這就要求許多新的課程加入到課程體系中來(lái),必然造成已有課程總學(xué)時(shí)數(shù)呈現(xiàn)下降趨勢(shì)。III型和II型語(yǔ)言理論作為編譯原理課程與形式語(yǔ)言與自動(dòng)機(jī)課程的共同相關(guān)部分,自然面臨合并和優(yōu)化設(shè)計(jì)問(wèn)題。
現(xiàn)有編譯原理課程的理論完整性不足表現(xiàn)在幾個(gè)方面:①在詞法分析器設(shè)計(jì)中使用了有限狀態(tài)自動(dòng)機(jī),但沒(méi)有完整包括正則語(yǔ)言的判定性理論;②介紹的語(yǔ)法分析框架,沒(méi)有明確給出理論依據(jù);③語(yǔ)義分析使用的是語(yǔ)法制導(dǎo)翻譯方法,僅在方法學(xué)上將屬性文法與分析框架進(jìn)行了集成;④基于工具自動(dòng)生成詞法與語(yǔ)法分析器,沒(méi)有生成原理的介紹;⑤選擇性介紹類型檢查、類型推理的具體實(shí)現(xiàn),沒(méi)有類型理論的系統(tǒng)介紹;⑥介紹運(yùn)行環(huán)境的實(shí)現(xiàn),沒(méi)有介紹程序語(yǔ)義支持。
為了有助于學(xué)生融會(huì)貫通課程知識(shí),在課程中闡明理論依據(jù)是必要的。解決的方法是完整引入相應(yīng)理論,并將原有內(nèi)容與這些理論結(jié)合起來(lái)。此外,由于課時(shí)的限制和降低課程難度的要求,謹(jǐn)慎選擇較復(fù)雜的理論(如類型理論和語(yǔ)義學(xué)等),轉(zhuǎn)而求助于課程體系層面的解決方法。
引起課程定位與作用模糊問(wèn)題是有客觀原因的:一方面,經(jīng)過(guò)計(jì)算機(jī)系統(tǒng)的早期發(fā)展,編譯器技術(shù)已經(jīng)相對(duì)成熟穩(wěn)定,盡管隨著體系結(jié)構(gòu)演變也在緩慢發(fā)展,但與計(jì)算機(jī)技術(shù)整體快速發(fā)展相比,可以認(rèn)為處于相對(duì)停滯狀態(tài),因而直接相關(guān)的工作崗位需求也少;另一方面,幾乎所有軟件和計(jì)算系統(tǒng)都由程序構(gòu)成,程序決定計(jì)算機(jī)應(yīng)用的幾乎所有方面,所以,編譯原理課程所介紹的程序分析變換和優(yōu)化是計(jì)算機(jī)科學(xué)與技術(shù)的基礎(chǔ)。此外,編譯技術(shù)還是軟硬件協(xié)同設(shè)計(jì)的組成部分,也是計(jì)算機(jī)系統(tǒng)發(fā)展的支撐技術(shù),其重要意義不言而喻。另外,從人才培養(yǎng)模式的角度也能找到存在這種問(wèn)題的原因。一般觀點(diǎn)認(rèn)為大學(xué)“2+2”模式分別注重基礎(chǔ)培養(yǎng)和專業(yè)培養(yǎng),但編譯原理課程一般在大三開(kāi)設(shè),因而不能歸為基礎(chǔ)理論環(huán)節(jié),從而錯(cuò)過(guò)對(duì)學(xué)生進(jìn)行相關(guān)抽象思維能力培養(yǎng)的最佳時(shí)間節(jié)點(diǎn)。
綜上分析,可以使用如下判據(jù)解決問(wèn)題:①課程的類型歸屬:強(qiáng)調(diào)理論性的課程還是技術(shù)基礎(chǔ)課程?②課程內(nèi)容選擇范圍:作為系統(tǒng)軟件關(guān)注設(shè)計(jì)方法還是軟硬件實(shí)現(xiàn)細(xì)節(jié)?③本課程對(duì)于專業(yè)課程的作用:作為理論基礎(chǔ)課程還是專業(yè)技術(shù)課程?④課程的難易程度:偏重抽象的形式化描述還是實(shí)現(xiàn)細(xì)節(jié)?⑤與其他課程的關(guān)系:是獨(dú)立的有內(nèi)涵的課程還是其它課程的綜合練習(xí)?
事實(shí)上,對(duì)這些判據(jù)的不同回答就構(gòu)成了各自特色的編譯原理課程,本文的形式語(yǔ)言與編譯課程在構(gòu)建過(guò)程中選擇每個(gè)判據(jù)中的第一個(gè)選項(xiàng),由此明晰了課程定位和作用。
編譯原理課程與形式語(yǔ)言理論、語(yǔ)言范型和類型系統(tǒng)等先修課程發(fā)生重疊,前者涉及該課程核心,后者是編譯需求。編譯原理課程也與系統(tǒng)類課程發(fā)生重疊,如指令系統(tǒng)、程序映像、優(yōu)化技術(shù)等,屬于技術(shù)細(xì)節(jié)層面重疊。
為了消除與其他課程重疊,可采用多種方法:第一種是課程體系設(shè)計(jì)層面的解決方法,結(jié)合課程進(jìn)度和側(cè)重點(diǎn),分別落實(shí)客觀的重疊知識(shí)點(diǎn),分配給相應(yīng)課程,這種方法對(duì)解決課程群間的內(nèi)容重疊有效,比如采用課程之間互相兼顧、優(yōu)化系統(tǒng)類課程群等方法。第二種方法是避免重復(fù)先修課程的內(nèi)容,該方法適用于解決人為造成的與離散數(shù)學(xué)和數(shù)據(jù)結(jié)構(gòu)課程的重疊,比如不要試圖將編譯原理課程設(shè)計(jì)為先修課程的綜合練習(xí)。最后一類方法是將其他課程內(nèi)容合并到本課程中,該方法適用于消除和形式語(yǔ)言與自動(dòng)機(jī)、程序設(shè)計(jì)等課程的重疊,該方法的副作用是容易導(dǎo)致課程名稱和內(nèi)涵發(fā)生重構(gòu)。
運(yùn)用以上三種消除重疊的方法,編譯原理課程內(nèi)容的合理性得到優(yōu)化,優(yōu)化后的內(nèi)容涵蓋了完整的形式語(yǔ)言理論,所以其名稱也必將發(fā)生變更,形成了形式語(yǔ)言與編譯課程,就是本文標(biāo)題所指??紤]到程序設(shè)計(jì)語(yǔ)言也是形式語(yǔ)言,將原有的程序設(shè)計(jì)語(yǔ)言的編譯原理課程改名為形式語(yǔ)言與編譯課程并不會(huì)破壞一致性,反而更有普遍適用性。
課程內(nèi)容與教學(xué)過(guò)程設(shè)計(jì)本著簡(jiǎn)單的設(shè)計(jì)原則:控制課程難度,將原理與實(shí)現(xiàn)分開(kāi),由課時(shí)數(shù)限定理論內(nèi)容的選擇。課程內(nèi)容選擇如圖1所示。
在圖1中,形式語(yǔ)言與編譯課程的內(nèi)容一部分取自形式語(yǔ)言與自動(dòng)機(jī)課程,另一部分為重新設(shè)計(jì)的編譯原理課程的詞法分析、語(yǔ)法分析和語(yǔ)義分析部分,所形成的形式語(yǔ)言與編譯課程可以看作是對(duì)原有兩門課程的合并。
形式語(yǔ)言與自動(dòng)機(jī)課程中余下的內(nèi)容屬于計(jì)算導(dǎo)論中的高級(jí)內(nèi)容,必要時(shí)可以作為高年級(jí)選修課程獨(dú)立設(shè)課;編譯原理課程中的代碼優(yōu)化和代碼生成也是專業(yè)重要內(nèi)容,也可以作為選修課單獨(dú)設(shè)課或編譯原理高級(jí)專題講座內(nèi)容。
圖1 課程設(shè)計(jì)方案
這個(gè)設(shè)計(jì)方案突出了課程的理論性,另外從專業(yè)技術(shù)內(nèi)容角度考慮,編譯原理核心部分中的編譯器設(shè)計(jì)與實(shí)現(xiàn)仍然作為實(shí)驗(yàn)教學(xué)單獨(dú)設(shè)課,即編譯器設(shè)計(jì)專題實(shí)驗(yàn)課程,以此訓(xùn)練學(xué)生閱讀編譯源代碼并進(jìn)行詞法分析、語(yǔ)法分析、語(yǔ)義分析和代碼生成方面的動(dòng)手能力,達(dá)到對(duì)編譯器技術(shù)層面的掌握。
1)完整引入III型和II型語(yǔ)言理論。
III型語(yǔ)言理論包括DFA、NFA、ε-NFA、GNFA、r、文法、正則語(yǔ)言、等價(jià)性;II型語(yǔ)言理論包括CFG、推導(dǎo)、歸約、語(yǔ)法樹(shù)、PDA、PDA與CFG等價(jià)性、CFL性質(zhì)、范式等。這部分內(nèi)容移自形式語(yǔ)言與自動(dòng)機(jī)課程。
2)更新詞法分析。
利用正則語(yǔ)言判定性從輸入流中識(shí)別單詞符號(hào),只需很少保留編譯原理的詞法分析內(nèi)容。更新后的內(nèi)容包括詞法分析器框架、單詞符號(hào)設(shè)計(jì)、多DFA集成設(shè)計(jì)、詞法分析器自動(dòng)生成等。
從源程序中識(shí)別詞法單位的方法涉及一個(gè)通用的框架(見(jiàn)圖2),圖2中的判定框是框架的核心,用形式語(yǔ)言的方法決定輸入串所屬的詞法單位。圖中附加處理框表示對(duì)接受的輸入串進(jìn)行額外處理,包括將識(shí)別出的符號(hào)串轉(zhuǎn)換為內(nèi)部表示或者插入符號(hào)表,并對(duì)不接受的輸入串進(jìn)行錯(cuò)誤處理。框架中的前處理部分也叫預(yù)處理,是對(duì)源程序文本進(jìn)行一定程度的清洗(如刪除注解、規(guī)范空白字符等),之后才提供給判定框處理??蚣苤械暮筇幚硎菍⑴卸ńY(jié)果和附加處理結(jié)果構(gòu)造成單詞符號(hào)并按照某種方式呈現(xiàn)出來(lái),如保存在文件中或者返回給語(yǔ)法分析等。這個(gè)識(shí)別框架體現(xiàn)了詞法分析的原理與通用性。
多DFA集成設(shè)計(jì)解決了同時(shí)識(shí)別源程序中多個(gè)詞法單位的問(wèn)題,具體方法是構(gòu)造判定詞法單位的自動(dòng)機(jī),將識(shí)別每個(gè)詞法單位的DFA集成為一個(gè)DFA。算法[6]的輸入是需要識(shí)別的單詞符號(hào),它們屬于那些由序列中的正則表達(dá)式r0, ...,rn-1定義的詞法單位(種屬),而輸出就是集成后的DFA。
3)更新語(yǔ)法分析。
這個(gè)算法正確工作的條件是∩iL(ri)=?;如果x∈L(ri)且xy∈L(rj),那么x優(yōu)先被識(shí)別為單詞符號(hào),當(dāng)然這個(gè)條件還可以放松,將識(shí)別更靈活的語(yǔ)言如Lisp詞法單位。這部分最主要的改變是增加了項(xiàng)目下推自動(dòng)機(jī)IPDA作為自上而下分析和自下而上分析統(tǒng)一的理論依據(jù)。
上下文無(wú)關(guān)文法G 的IPDA 為 (itemG,T,itemG,Δ, [S'→·S], [S'→·S], {[S'→S·]}),其中遷移函數(shù)分為 (E)Δ([A→α·Nη],ε)={[A→α·Nη][N→·γ]| (N,γ)∈Ρ}、(S)Δ([A→α·aη], c)={[A→αa·η]}和 (R)Δ([A→α·Nη][N→·γ],ε)={[A→αN·η]} 三 類(IPDA 中狀態(tài)與棧頂符號(hào)相同)[6]。
自上而下分析是E-遷移對(duì)應(yīng)于推導(dǎo)。自下而上分析使用了IPDA的棧作為狀態(tài)棧,當(dāng)前棧頂元素為當(dāng)前狀態(tài),對(duì)于IPDA的三種遷移,符號(hào)棧進(jìn)行相應(yīng)地操作:(E)符號(hào)棧沒(méi)有動(dòng)作;(S)符號(hào)棧壓入a;(R)符號(hào)棧彈出|γ|個(gè)符號(hào), 然后壓入N。
形式語(yǔ)言與編譯課程的理論完整性體現(xiàn)在III型和II型語(yǔ)言理論完整。詞法分析基于III型語(yǔ)言的判定性,自上而下和自下而上的語(yǔ)法分析被統(tǒng)一在項(xiàng)目下推自動(dòng)機(jī)上,而語(yǔ)義分析仍采用語(yǔ)法制導(dǎo)的翻譯原理,并與IPDA結(jié)合起來(lái),中間代碼生成和運(yùn)行時(shí)環(huán)境歸屬到語(yǔ)義分析中,本身是完整的形式化代碼變換和優(yōu)化設(shè)計(jì)。
圖2 詞法單位的識(shí)別框架
4)更新語(yǔ)義分析。
沿用編譯原理中語(yǔ)法制導(dǎo)的語(yǔ)義分析,具體基于IPDA 來(lái)描述,假定當(dāng)前項(xiàng)目為[A→α·Xη],當(dāng)X=a時(shí)采用 S-遷移,Δ(-,a,ρ[A→α·aη])={(-,ρ[A→αa·η])},相應(yīng)的屬性求值工作是,將詞法分析器返回的結(jié)果作為a的綜合屬性的值。當(dāng)X=B時(shí)采用 E-遷移,Δ([A→α·Bη],ε,ρ)={(-,ρ[B→·γ]) | (B,γ)∈Ρ},對(duì)于新棧頂 [B→·γ]根據(jù)規(guī)則γ中所有符號(hào)的綜合屬性已經(jīng)算出值,同時(shí)B的繼承屬性也已經(jīng)求過(guò)值。
對(duì)于完全項(xiàng)目 [B→γ·]采用 R-遷移,Δ(-,ε,ρ[A→α·Bη][B→γ·])={(-,ρ[A→αB·η])},這時(shí)γ中所有符號(hào)的綜合屬性已經(jīng)算出,同時(shí)B的繼承屬性也已經(jīng)求出。所以,B的綜合屬性的值應(yīng)根據(jù)該產(chǎn)生式的語(yǔ)義規(guī)則進(jìn)行計(jì)算作為該項(xiàng)目A→αBη中B的屬性值。
教學(xué)過(guò)程見(jiàn)表1。
表1 形式語(yǔ)言與編譯課程的教學(xué)過(guò)程
采用兩種方法評(píng)價(jià)該課程效果,一種是分析的方法,另一種是實(shí)現(xiàn)并通過(guò)學(xué)生成績(jī)進(jìn)行評(píng)價(jià)。
1)涵蓋完整的理論和原理。
編譯原理課程使用形式語(yǔ)言的有關(guān)結(jié)論解決詞法語(yǔ)法分析的問(wèn)題,但沒(méi)有完整描述為什么這么做以及這樣做為什么可以,使教學(xué)內(nèi)容變成為一種技術(shù)要求學(xué)生掌握或記住,既會(huì)引起有用無(wú)用的疑問(wèn),也容易造成學(xué)生不知道所以然。本方案試圖改變這一狀況。以有窮自動(dòng)機(jī)為例,編譯中介紹的NFA映射函數(shù)δ是一個(gè)從 S×Σ*至2S的映射,這種表示給引入NFA接受串、擴(kuò)展遷移函數(shù)、DFA等價(jià)性的概念顯著增加了復(fù)雜度。往往最基本的形式是最有用的,也是最重要的,所以III型語(yǔ)言理論包含最基本的NFA(δ為從 S×Σ至2S的映射)和ε-NFA(δ為從S×Σ{ε}至2S的映射),并包括一般化的GNFA(弧上標(biāo)記為正則表達(dá)式)。更重要的是,組成該理論的定理及其證明建立了計(jì)算的模型,這些理論不僅用于解決編譯中的問(wèn)題,也用于解決計(jì)算機(jī)科學(xué)中的其他問(wèn)題,具有廣泛意義,借此在教學(xué)過(guò)程中培養(yǎng)學(xué)生觀察現(xiàn)象、認(rèn)識(shí)規(guī)律和發(fā)現(xiàn)規(guī)律的能力。
2)在正確的時(shí)間節(jié)點(diǎn)上培養(yǎng)學(xué)生抽象思維能力。
抽象是計(jì)算的基本屬性,抽象思維能力是計(jì)算機(jī)專業(yè)人才培養(yǎng)的重點(diǎn)之一。學(xué)習(xí)抽象知識(shí)是培養(yǎng)抽象思維能力的途徑。
形式語(yǔ)言與編譯課程的內(nèi)容有很高的抽象性:首先,來(lái)自于編譯原理的部分,因?yàn)樗顷P(guān)于程序分析變換和優(yōu)化的,相比程序設(shè)計(jì)屬于元級(jí)處理,其抽象性在教學(xué)實(shí)踐中也已有共識(shí);其次,就是形式化計(jì)算模型,包括III型和II型語(yǔ)言理論、類型系統(tǒng)、還包括形式語(yǔ)義學(xué)。形式語(yǔ)言與編譯課程的抽象性表現(xiàn)在上述兩個(gè)方面,單純的理論性課程和專業(yè)核心課程最多包括一個(gè)抽象性方面,因此,該課程是培養(yǎng)計(jì)算機(jī)專業(yè)學(xué)生抽象思維能力的主要課程之一。
能力培養(yǎng)的重點(diǎn)在大學(xué)4年各階段有所不同,從培養(yǎng)方案可以看出有多種模式:典型的“1+3”方案,即1年通識(shí)教育加上3年專業(yè)教育;另一種是“2+4”,即2年基礎(chǔ)教育加上4年專業(yè)教育。大一大二是理論基礎(chǔ)建立的黃金時(shí)段,過(guò)后由于專業(yè)課程加重且課程更關(guān)注方法論和技術(shù)層面的知識(shí),導(dǎo)致理論基礎(chǔ)變得沒(méi)有彌補(bǔ)和擴(kuò)展的空間,而且,后期也到了理論知識(shí)發(fā)揮潛在作用的時(shí)候。
培養(yǎng)方案的設(shè)計(jì)者面臨將部分課程作為前2年課程的選擇,他們往往站在學(xué)校的高度做決策,因此像電工實(shí)習(xí)、金工實(shí)習(xí)、工程制圖、生命科學(xué)基礎(chǔ)、數(shù)學(xué)建模等課程被選中,在這種情況下,也需要選擇計(jì)算機(jī)理論基礎(chǔ)課程。形式語(yǔ)言與編譯課程在大二下學(xué)期開(kāi)始,就提供了這類選擇性。
表2是計(jì)算機(jī)專業(yè)2015級(jí)學(xué)生第4學(xué)期課表(2016—2017學(xué)年第2學(xué)期),從中可以看出通識(shí)課程占比情況。一般情況下,傳統(tǒng)編譯原理課程在大三作為專業(yè)課開(kāi)設(shè)。本方案只是在時(shí)間上往前提前了一個(gè)學(xué)期,但課程性質(zhì)發(fā)生了變化,即從專業(yè)課變成作為理論基礎(chǔ)課,實(shí)現(xiàn)了在正確的時(shí)間節(jié)點(diǎn)上培養(yǎng)學(xué)生抽象思維能力的教學(xué)目標(biāo)。
該課程設(shè)計(jì)結(jié)果列入西安交通大學(xué)最新版培養(yǎng)計(jì)劃,面向2015級(jí)計(jì)算機(jī)班、少年班(選修)和錢學(xué)森班(選修),于2016—2017學(xué)年第2學(xué)期開(kāi)課。
期末筆試試題共有9道題,全面覆蓋課程內(nèi)容。各題描述及得分情況如表3所述。
在表3中,除了第8題外,各題平均得分和分?jǐn)?shù)分布正常。第4題平均得分較高,說(shuō)明形式語(yǔ)言部分掌握較好,與學(xué)生反饋也吻合。第8題失分原因歸結(jié)為方案多、教材不配套和時(shí)間緊3點(diǎn),其中方案多是指要求掌握多個(gè)活動(dòng)記錄方案(如fp-sp活動(dòng)記錄格式[7]和sp-top格式[8]),并學(xué)會(huì)棧式存儲(chǔ)的設(shè)計(jì)原理,相比以往提高了要求。筆者計(jì)劃通過(guò)提供配套教材并放棄sp-top格式來(lái)解決。表4、表5、表6是各班級(jí)成績(jī)匯總,其中只包括計(jì)算機(jī)2個(gè)班。
從各班成績(jī)來(lái)看,分布基本合理,總體上達(dá)到成績(jī)良好。
與此課程配套的專題實(shí)驗(yàn)課采用引進(jìn)斯坦福大學(xué)COOL實(shí)驗(yàn)平臺(tái)以及題目,結(jié)果得分情況正常,而少年班完成效果最好,平均分在90分以上。表明從編譯器設(shè)計(jì)角度來(lái)看,本課程設(shè)計(jì)合理,能夠?yàn)榇蠖W(xué)生所接受。
表2 計(jì)算機(jī)專業(yè)第4學(xué)期課表
表3 試題描述及平均得分
表4 2015級(jí)少年班和錢學(xué)森班選修學(xué)生的分?jǐn)?shù)分布
表5 計(jì)算機(jī)2015級(jí)4班分?jǐn)?shù)分布
表6 計(jì)算機(jī)2015級(jí)5班分?jǐn)?shù)分布
另外值得一提的是,少年班和錢學(xué)森班的離散數(shù)學(xué)課程和數(shù)據(jù)結(jié)構(gòu)與本課程在同一學(xué)期同時(shí)開(kāi)課。事實(shí)證明,這兩門先修課程與本課程同時(shí)進(jìn)行也是可行的。
形式語(yǔ)言與編譯課程被設(shè)計(jì)為形式語(yǔ)言與自動(dòng)機(jī)課程和編譯原理課程的替代,將III型和II型語(yǔ)言理論與編譯前端的原理結(jié)合起來(lái),在大二下學(xué)期開(kāi)設(shè),實(shí)踐證明能夠取得良好的學(xué)習(xí)效果。該課程涵蓋完整的理論和原理,消除了課程間重疊,明晰了作為理論基礎(chǔ)的合理性,達(dá)到在正確的時(shí)間節(jié)點(diǎn)上培養(yǎng)學(xué)生抽象思維能力的目標(biāo)。
設(shè)計(jì)本課程貫穿了三個(gè)原則:觀察現(xiàn)象,認(rèn)識(shí)規(guī)律,學(xué)著揭示規(guī)律;知其所以然;會(huì)做與想通,以后者為重。本課程方案適合重點(diǎn)高校計(jì)算機(jī)專業(yè)普通班級(jí)及拔尖班級(jí)使用,不失普遍意義。
本文提出的形式語(yǔ)言與編譯課程設(shè)計(jì)為54學(xué)時(shí)內(nèi)容,尚有一些必要的內(nèi)容沒(méi)有包括進(jìn)去,如LALR分析、上下文無(wú)關(guān)語(yǔ)言泵引理、類型系統(tǒng)與類型推理、面向?qū)ο笳Z(yǔ)言等,可通過(guò)進(jìn)一步優(yōu)化課程內(nèi)容、調(diào)整課時(shí)得到解決。此外,在設(shè)計(jì)上沒(méi)有解決與程序設(shè)計(jì)語(yǔ)言的重疊問(wèn)題,需要進(jìn)一步研究。
參考文獻(xiàn):
[1]趙銀亮. 關(guān)注編譯原理的等價(jià)性[J].計(jì)算機(jī)教育, 2011(11): 37-44.
[2]蔣宗禮. "編譯原理"課程與專業(yè)能力培養(yǎng)[J]. 計(jì)算機(jī)教育, 2009(21): 4-6.
[3]王挺, 李夢(mèng)君, 周會(huì)平. 對(duì)編譯原理課程教學(xué)中計(jì)算思維培養(yǎng)的探討[J]. 計(jì)算機(jī)教育, 2009(21): 11-13.
[4]何炎祥, 伍春香. 計(jì)算機(jī)專業(yè)不需要開(kāi)設(shè)編譯原理課程嗎?[J]. 計(jì)算機(jī)教育, 2009(4): 61-62.
[5]周會(huì)平, 王挺, 李夢(mèng)君. 關(guān)于編譯原理課程定位的思考[J]. 計(jì)算機(jī)教育,2011(11): 45-47.
[6]Wilhelm R, Seidl H, Hack S. Compiler design: Syntactic and semantic analysis [M]. Berlin: Springer-Verlag Berlin Heidelberg,2013.
[7]Kenneth C, Louden. Compiler construction: Principles and practice [M].South Melbourn: Cengage Learning, 1997.
[8]陳火旺, 錢家驊, 孫永強(qiáng). 程序設(shè)計(jì)語(yǔ)言: 編譯原理 [M]. 北京: 國(guó)防工業(yè)出版社, 2004.