專利名稱:基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法
基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法技術(shù)領(lǐng)域
本發(fā)明屬于計(jì)算機(jī)和信息技術(shù)領(lǐng)域,特別涉及計(jì)算模塊輸入輸出數(shù)據(jù)解析的方法。
背景技術(shù):
隨著計(jì)算機(jī)和信息技術(shù)的發(fā)展,各種程序設(shè)計(jì)語言不斷出現(xiàn)、發(fā)展和更新,各行業(yè)根據(jù)該領(lǐng)域的特點(diǎn),選用不同的語言,開發(fā)了大量的計(jì)算機(jī)程序或軟件。其中,一些程序中關(guān)于數(shù)據(jù)處理和計(jì)算的部分或模塊在行業(yè)領(lǐng)域較為基礎(chǔ)和實(shí)用。雖然DCOM、CORBA、Web服務(wù)等分布式技術(shù)為計(jì)算模塊的共享和重用提供了有效的技術(shù),XML作為網(wǎng)絡(luò)上通用的數(shù)據(jù)交換格式,為計(jì)算模塊間的數(shù)據(jù)交換提供有效的方法。但是,計(jì)算模塊的有效共享和正確運(yùn)行的關(guān)鍵在于其輸入輸出數(shù)據(jù)的說明。由于計(jì)算模塊本身輸入輸出數(shù)據(jù)的結(jié)構(gòu)和格式各異,大多由模塊編寫者或發(fā)布者手工編寫輸入輸出數(shù)據(jù)的說明,有的計(jì)算模塊甚至沒有任何說明。一些集成開發(fā)環(huán)境和工具,如Visual Studi0、EclipSe,能夠根據(jù)代碼生成部分注釋或說明,其缺點(diǎn)在于生成的注釋或說明主要是函數(shù)或方法名稱、輸入輸出數(shù)據(jù)名稱及類型。當(dāng)輸入輸出數(shù)據(jù)是復(fù)雜類型或文件時(shí),并不涉及數(shù)據(jù)具體的結(jié)構(gòu)和格式。從而,造成了大量計(jì)算模塊的閑置、無法或難以共享和重用,相同或相近功能計(jì)算模塊的重復(fù)開發(fā)。
詞法分析和語法分析是編譯過程的兩個(gè)階段,可以實(shí)現(xiàn)程序設(shè)計(jì)語言單詞結(jié)構(gòu)和語法結(jié)構(gòu)的識別與處理。詞法分析是指將字符序列轉(zhuǎn)換為標(biāo)記序列的過程。進(jìn)行詞法分析的程序或者函數(shù)叫做詞法分析器。語法分析是指根據(jù)某種給定的形式文法對標(biāo)記序列進(jìn)行分析并確定其語法結(jié)構(gòu)的過程。進(jìn)行語法分析的程序或者函數(shù)叫做語法分析器。語法分析器通常使用一個(gè)獨(dú)立的詞法分析器從輸入字符中分離出一個(gè)個(gè)標(biāo)記,并將標(biāo)記流作為其輸入。實(shí)際應(yīng)用中,詞法分析器和語法分析器可以手工編寫,也可以使用工具自動(dòng)生成。其中,Lex類和^cc類工具分別是詞法分析器和語法分析器自動(dòng)生成工具中應(yīng)用最為廣泛的工具。目前,尚未見到將詞法分析和語法分析方法、技術(shù)應(yīng)用到計(jì)算模塊輸入輸出數(shù)據(jù)的結(jié)構(gòu)和格式解析方面。發(fā)明內(nèi)容
為了解決當(dāng)前計(jì)算模塊共享和重用過程中,計(jì)算模塊編寫者或發(fā)布者手工編寫輸入輸出數(shù)據(jù)說明繁瑣、采用注釋生成工具生成的計(jì)算模塊輸入輸出數(shù)據(jù)說明不夠詳細(xì),僅包括輸入輸出數(shù)據(jù)及其類型,而不包括輸入輸出數(shù)據(jù)的具體結(jié)構(gòu)和格式的問題,本發(fā)明的目的是提供一種計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法,該方法不僅能夠自動(dòng)解析、生成計(jì)算模塊源代碼中輸入輸出數(shù)據(jù)的說明,而且生成的輸入輸出數(shù)據(jù)說明包括數(shù)據(jù)的名稱、類型、結(jié)構(gòu)和格式信息,能夠滿足計(jì)算模塊共享和重用過程中對輸入輸出數(shù)據(jù)說明的要求。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法,包括以下兩個(gè)階段 第一階段,針對不同的程序設(shè)計(jì)語言分別構(gòu)造面向計(jì)算模塊輸入輸出要素的詞法分析4器和語法分析器;其中,計(jì)算模塊輸入輸出要素模型包括過程、變量、常量和格式四種實(shí)體, 過程實(shí)體包括名稱、類型、父過程和子過程集合屬性;變量和常量實(shí)體均包括名稱、類型、維度、值和所在過程屬性;格式實(shí)體包括格式項(xiàng)、項(xiàng)格式描述和控制格式描述屬性;格式項(xiàng)為常量或變量,或者是兩者的組合;(1)面向計(jì)算模塊輸入輸出要素的詞法分析器構(gòu)造,包括下列步驟a)標(biāo)記分類基于所述計(jì)算模塊輸入輸出要素模型,將計(jì)算模塊采用的程序設(shè)計(jì)語言所涉及的字符分為標(biāo)識符、整型常數(shù)、實(shí)型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符、控制格式描述符、注釋、空白字符和其它字符;b)定義詞法標(biāo)記根據(jù)計(jì)算模塊程序設(shè)計(jì)語言的詞法規(guī)則,將所述標(biāo)識符、整型常數(shù)、 實(shí)型常數(shù)、數(shù)據(jù)格式描述符、控制格式描述符、注釋和空白字符分別定義為一種標(biāo)記;將所述數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字和讀寫操作關(guān)鍵字,每個(gè)關(guān)鍵字定義為一種標(biāo)記;c)對標(biāo)記添加詞法動(dòng)作對于語法分析有用的標(biāo)記,包括標(biāo)識符、整型常數(shù)、實(shí)型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符和控制格式描述符標(biāo)記,記錄并將標(biāo)記值傳遞給語法分析器,返回標(biāo)記類型;對語法分析無用的標(biāo)記,包括注釋、空白字符標(biāo)記和其它字符作丟棄處理;d)根據(jù)上述詞法標(biāo)記及其詞法動(dòng)作,通過編程或詞法分析器自動(dòng)化生成工具的方式實(shí)現(xiàn)面向計(jì)算模塊輸入輸出要素的詞法分析器;(2)面向計(jì)算模塊輸入輸出要素的語法分析器構(gòu)造,包括下列步驟i)基于所述計(jì)算模塊輸入輸出要素模型,找出計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu), 包括程序結(jié)構(gòu)、變量定義語句、常量定義語句、循環(huán)結(jié)構(gòu)、文件操作語句、讀寫操作語句和格式語句; )描述計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu); iii)對計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)添加語義動(dòng)作 在程序結(jié)構(gòu)語法描述中,提取過程信息,包括名稱和類型,將該過程加入過程表并設(shè)置為當(dāng)前過程;在變量定義語法描述中,提取變量信息,包括名稱、類型和所在過程,將該變量加入變量表;在常量定義語法描述中,提取常量信息,包括名稱、類型和所在過程,將該常量加入常量表;在循環(huán)結(jié)構(gòu)語法描述中,在循環(huán)結(jié)構(gòu)開始處,計(jì)算循環(huán)次數(shù),設(shè)置循環(huán)計(jì)數(shù)器為循環(huán)次數(shù),若循環(huán)次數(shù)為變量,則設(shè)置為自定義默認(rèn)循環(huán)次數(shù);在循環(huán)結(jié)構(gòu)結(jié)束處,設(shè)置循環(huán)計(jì)數(shù)器為0;在打開文件語句語法描述中,提取所打開文件的信息,包括文件名和路徑,在指定目錄創(chuàng)建同名文件,并設(shè)置該文件為當(dāng)前文件;在關(guān)閉文件語句語法描述中,設(shè)置當(dāng)前文件為空;在讀操作語法描述中,提取當(dāng)前讀操作的設(shè)備、讀操作實(shí)體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找讀操作實(shí)體列表中的變量和常量,進(jìn)行處理和重組織后,將讀操作實(shí)體列表中的各個(gè)變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;在寫操作語法描述中,提取當(dāng)前寫操作的設(shè)備、寫操作實(shí)體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找寫操作實(shí)體列表中的變量和常量,進(jìn)行處理和重組織后,將寫操作實(shí)體列表中的各個(gè)變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;iv)根據(jù)上述計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)的描述及其語義動(dòng)作,通過編程或語法分析器自動(dòng)化生成工具的方式實(shí)現(xiàn)語法分析器;第二階段,計(jì)算模塊實(shí)例輸入輸出數(shù)據(jù)解析階段以所述計(jì)算模塊實(shí)例源代碼為輸入, 利用第一階段構(gòu)造的面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動(dòng)生成輸入輸出數(shù)據(jù)說明,具體步驟如下1)根據(jù)計(jì)算模塊實(shí)例所采用的程序設(shè)計(jì)語言,選擇第一階段中構(gòu)造的相應(yīng)語言的面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器;如果沒有相應(yīng)語言的詞法分析器和語法分析器,則重復(fù)第一階段所有步驟;2)讀取計(jì)算模塊源代碼文件到字符流中;3)創(chuàng)建詞法分析器實(shí)例,以字符流作為輸入;4)調(diào)用詞法分析器實(shí)例詞法分析操作,返回結(jié)果為標(biāo)記流;5)創(chuàng)建語法分析器實(shí)例,以標(biāo)記流為輸入;6)調(diào)用語法分析器實(shí)例語法分析操作,返回結(jié)果為生成計(jì)算模塊輸入輸出數(shù)據(jù)說明。
所述面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器構(gòu)造階段和計(jì)算模塊實(shí)例輸入輸出數(shù)據(jù)解析階段是兩個(gè)順序、獨(dú)立的過程;如果已經(jīng)構(gòu)造了或獲取了計(jì)算模塊實(shí)例所需的面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器,則可跳過第一階段,直接進(jìn)入第二階段。
本發(fā)明基于代碼分析的計(jì)算模塊的輸入輸出數(shù)據(jù)自動(dòng)解析方法,所述面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器,可以根據(jù)不同計(jì)算模塊所采用的程序設(shè)計(jì)語言,設(shè)計(jì)適用于不同程序設(shè)計(jì)語言的詞法分析器和語法分析器。因此,本發(fā)明基于代碼分析的計(jì)算模塊的輸入輸出數(shù)據(jù)自動(dòng)解析方法,廣泛適用于各種程序設(shè)計(jì)語言編寫的計(jì)算模塊。
下面結(jié)合附圖和實(shí)施例對本發(fā)明進(jìn)一步說明。
圖1為本發(fā)明提出的計(jì)算模塊輸入輸出要素模型圖。
圖2為本發(fā)明的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法的流程圖。
具體實(shí)施方式
下面對本發(fā)明實(shí)例中的技術(shù)方案進(jìn)行清楚、完整的描述。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法,該方法提出的計(jì)算模塊輸入輸出要素模型包括過程、變量、常量和格式四種實(shí)體,過程實(shí)體包括名稱、類型、父過程和子過程集合屬性;變量和常量實(shí)體均包括名稱、類型、維度、值和所在過程屬性;格式實(shí)體包括格式項(xiàng)、項(xiàng)格式描述和控制格式描述屬性;格式項(xiàng)為常量或變量,或者是兩者的組合,如圖1所示?;谏鲜鲇?jì)算模塊輸入輸出要素模型,本發(fā)明基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法包括兩個(gè)階段,如圖2所示。本實(shí)施例計(jì)算模塊采用 Fortran語言編寫,具體步驟包括1、面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器構(gòu)造階段基于本發(fā)明提出的計(jì)算模塊輸入輸出要素模型,針對該計(jì)算模塊采用的程序設(shè)計(jì)語言Fortran分別構(gòu)造面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器;2、 計(jì)算模塊實(shí)例輸入輸出數(shù)據(jù)解析階段以計(jì)算模塊源代碼為輸入,利用面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動(dòng)生成輸入輸出數(shù)據(jù)說明。在第一階段中,本實(shí)施例采用Lex類工具自動(dòng)生成詞法分析器、^cc類工具自動(dòng)生成語法分析器。
本實(shí)施例計(jì)算模塊實(shí)例源代碼如下 ! Math Caculator program MathCalc integer i integer number integer sumopen (10,F(xiàn)ile=' FileIO. txt') do i = 1,10read (10, number sum = sum + numberenddo close (100) write (*,*), sumwrite (*,' (〃sumResult〃,4X12)'), sum end program第一階段面向計(jì)算模塊輸入輸出要素的詞法分析器與語法分析器構(gòu)造 1、面向計(jì)算模塊輸入輸出要素的詞法分析器構(gòu)造,包括下列步驟 a)標(biāo)記分類基于所述計(jì)算模塊輸入輸出要素模型,將本實(shí)施例計(jì)算模塊采用的程序設(shè)計(jì)語言Fortran中所涉及的字符分為標(biāo)識符、整型常數(shù)、實(shí)型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、 控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符、控制格式描述符、注釋、空白字符和其它字符;b)定義詞法標(biāo)記創(chuàng)建Lex詞法文件,命名為LexFortran. lex。根據(jù)Fortran 語言的語言規(guī)范,定義的詞法標(biāo)記包括標(biāo)識符(identifier)、整型常數(shù)(int_C0nst)、實(shí)型常數(shù)(realconst)、數(shù)據(jù)類型關(guān)鍵字(integer、real, character)、程序結(jié)構(gòu)關(guān)鍵字 (program, end)、控制結(jié)構(gòu)關(guān)鍵字(do、enddo)、文件操作關(guān)鍵字(open、close)、讀寫操作關(guān)鍵字(read、write)、數(shù)據(jù)格式描述符(data_fmt_desc)、控制格式描述符(ctrl_fmt_ desc)、注釋(comment)和空白字符(whitespace)。將所述標(biāo)記的定義按照Lex語法規(guī)范進(jìn)行表達(dá)并保存到LexFortran. Iex文件中。
下面是 comment、whitespace、int_const、identifier 禾口 integer 標(biāo)記的定義comment“ !.whitespace\s int_const
+ identifier [a_zA_Z_][a-zA-Z0_9_]* integer integerc)對標(biāo)記添加詞法動(dòng)作對于語法分析有用的標(biāo)記,包括標(biāo)識符 (identifier)、整型常數(shù)(int_Const)、實(shí)型常數(shù)(realconst)、數(shù)據(jù)類型關(guān)鍵字 (integer、real、character)、程序結(jié)構(gòu)關(guān)鍵字(program、end)、控制結(jié)構(gòu)關(guān)鍵字(do、 enddo)、文件操作關(guān)鍵字(open、close)、讀寫操作關(guān)鍵字(read、write)、數(shù)據(jù)格式描述符 (data_fmt_deSC)、控制格式描述符(Ctrl_fmt_deSC),將標(biāo)記值yytext進(jìn)行適當(dāng)?shù)念愋娃D(zhuǎn)換,賦值給yylvalue,并返回標(biāo)記枚舉類型的整數(shù)代號;對語法分析無用的標(biāo)記,包括注釋(comment)、空白字符(whitespace)標(biāo)記以及其它字符作丟棄處理。yytext是詞法分析器中表示標(biāo)記值的屬性,yylvalue是在語法分析器中表示標(biāo)記值的屬性,標(biāo)記枚舉類型在 Yacc源程序中進(jìn)行定義。將所述標(biāo)記的詞法動(dòng)作按Lex語法規(guī)范進(jìn)行表達(dá),添加到相應(yīng)的詞法標(biāo)記處,并保存到LexFortran. Iex文件中。
d)采用支持《1語言的Lex類詞法分析器自動(dòng)生成工具,將Lex詞法文件 FortranLexer. Iex自動(dòng)生成面向計(jì)算模塊輸入輸出要素的詞法分析器R)rtranLexer。
2、面向計(jì)算模塊輸入輸出要素的語法分析器構(gòu)造,包括下列步驟a)基于所述計(jì)算模塊輸入輸出要素模型,找出計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu),包括程序結(jié)構(gòu)、變量定義語句、常量定義語句、循環(huán)結(jié)構(gòu)、文件操作語句、讀寫操作語句和格式語句;b)定義語義值類型和標(biāo)記枚舉類型 創(chuàng)建^cc語法文件,命名為PGFortran. y ;定義語義值類型為union類型,包括intValue、realValue和strValue元素; 定義標(biāo)記枚舉類型,包括 INT_C0NST、REAL_C0NST、INTEGER、REAL、CHARACTER、raOGRAM、 PROCESS、END、DO、ENDDO、IF、ENDIF、THEN、ELSE、OPEN、CLOSE、READ、WRITE、FILE、LP、RP、 ASTERISK、COMMA、DOT、EQ, IDENTIFIER將所述語義值類型和標(biāo)記枚舉類型的定義按照^cc語法規(guī)范進(jìn)行表達(dá),添加到 PGFortran. y文件的相應(yīng)的部分,并進(jìn)行保存;c)描述計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)本實(shí)施例采用^cc語法規(guī)范對計(jì)算模塊實(shí)例中所涉及的計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)進(jìn)行描述,包括程序結(jié)構(gòu)、變量定義語句、循環(huán)結(jié)構(gòu)、文件操作語句、讀寫操作語句和格式語句;程序結(jié)構(gòu)語法結(jié)構(gòu)描述 excutab1e_program /水 empty 水/I excutab1e—program program—unitjprogram—unit: program—stmt program—part end—program—stmtprogram_stmt PROGRAM IDENTIFIER jend_program_stmt END PROGRAM jprogram—part:/水 empty 水/I program_part declaration_partI program—part execution—part j變量定義語句語法結(jié)構(gòu)描述declaration—part:type_spec IDENTIFIER jtype_spec: INTEGER | REAL | CHARACTER j循環(huán)結(jié)構(gòu)語法結(jié)構(gòu)描述do construct:do stmt do block end dodo stmtDO IDENTIFIER EQ INT CONST COMMA INT CONSTend—do: ENDDO jdo—block:/水 empty 水/I execution—part j打開文件操作語句語法結(jié)構(gòu)描述open_stmtOPEN LP INT_C0NST COMMA FILE EQ file_name RP jfile_name: IDENTIFIER DOT IDENTIFIER j關(guān)閉文件操作語句語法結(jié)構(gòu)描述close_stmt:CLOSE LP INT_C0NST RP j讀操作語句語法結(jié)構(gòu)描述read_stmt READ LP INT_C0NST COMMA ASTERISK RP IDENTIFIER jwrite_stmt: WRITE LP ASTERISK COMMA ASTERISK RP COMMA IDENTIFIER jd)對計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)添加語義動(dòng)作 定義語義動(dòng)作輔助類、輔助類實(shí)例、輔助變量,包括過程類ftOcess、變量類Variable、過程實(shí)例列表processList、變量實(shí)例列表variableList、循環(huán)計(jì)數(shù)器loopTimes、當(dāng)前程序currentProgram、當(dāng)前文件currentFile、文件流實(shí)例fs和寫入流實(shí)例sw ;過程類 Process 包括 Name、Type、Parent 禾口 Children 屬性;變量類 Variable 包括 Name、Type、 Demension、HValue 禾口 LocProcess 屬性;在程序結(jié)構(gòu)語法描述中,嵌套語義動(dòng)作,提取過程信息,包括名稱和類型,實(shí)例化過程類并將其添加到過程實(shí)例列表processList中;設(shè)置當(dāng)前過程實(shí)例currentProcess為此過程實(shí)例;在變量定義語句語法描述中,嵌套語義動(dòng)作,提取變量信息,包括名稱、類型、所在過程,實(shí)例化變量類并將其添加到變量實(shí)例列表variabelList中;在循環(huán)結(jié)構(gòu)語法描述中,嵌套語語義動(dòng)作,在循環(huán)結(jié)構(gòu)開始處,計(jì)算循環(huán)次數(shù),設(shè)置循環(huán)計(jì)數(shù)器loopTimes為循環(huán)次數(shù),若循環(huán)次數(shù)為變量,則設(shè)置為自定義默認(rèn)循環(huán)次數(shù);在循環(huán)結(jié)構(gòu)結(jié)束處,設(shè)置循環(huán)計(jì)數(shù)器loopTimes為0,即IoopTimes=O ;在打開文件語句語法描述中,嵌套語義動(dòng)作,提取所打開文件的信息,包括文件名和路徑,在指定目錄創(chuàng)建同名文件,并設(shè)置當(dāng)前文件currentFile為此文件;在關(guān)閉文件語句語法描述中,嵌套語義動(dòng)作,設(shè)置當(dāng)前文件currentFile為空,關(guān)閉文件流實(shí)例fs ;在讀操作語法描述中,嵌套語義動(dòng)作,提取當(dāng)前讀操作的設(shè)備、讀操作實(shí)體列表、數(shù)據(jù)格式描述符和控制格式描述符;若讀操作設(shè)備為鍵盤,則設(shè)置當(dāng)前文件currentFile為標(biāo)準(zhǔn)輸入設(shè)備stdin,即currentFile= "stdin";在變量實(shí)例列表variableList中查找讀操作實(shí)體列表中的變量,進(jìn)行處理和重組織后,將讀操作實(shí)體列表中的各個(gè)變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;在寫操作語法描述中,嵌套語義動(dòng)作,提取當(dāng)前寫操作的設(shè)備、寫操作實(shí)體列表、數(shù)據(jù)格式描述符和控制格式描述符;若寫操作設(shè)備為鍵盤,則設(shè)置當(dāng)前文件currentFile為標(biāo)準(zhǔn)輸出設(shè)備stdout,即currentFile= 〃stdout〃 ;在變量實(shí)例列表variableList中查找寫操作實(shí)體列表中的變量,進(jìn)行處理和重組織后,將寫操作實(shí)體列表中的各個(gè)變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;d)采用支持C#語言的^cc類語法分析器自動(dòng)生成工具,設(shè)置生成命令參數(shù)使語法分析器與詞法分析器配合使用,將編寫的^cc語法文件PGFortran. y自動(dòng)生成面向計(jì)算模塊輸入輸出要素的語法分析器Parser ;第二階段計(jì)算模塊實(shí)例輸入輸出數(shù)據(jù)解析本實(shí)施例采用C#語言編寫一個(gè)控制臺程序?qū)崿F(xiàn)計(jì)算模塊輸入輸出數(shù)據(jù)的自動(dòng)解析, 具體步驟為1、選擇、采用本實(shí)施例第一階段所構(gòu)造的面向計(jì)算模塊輸入輸出要素的詞法分析器 FortranLexer 禾口語法分析器 Parser ;2、讀取計(jì)算模塊源代碼文件到字符流file中;3、創(chuàng)建詞法分析器實(shí)例scnr,以字符流file作為輸入;4、創(chuàng)建語法分析器實(shí)例parser;5、設(shè)置語法分析器實(shí)例parser的掃描器屬性farmer為步驟3中創(chuàng)建的詞法分析器實(shí)例scnr ;6、調(diào)用語法分析器實(shí)例parser的語法分析操作Parse,將在內(nèi)部自動(dòng)調(diào)用詞法分析器實(shí)例scnr的詞法分析操作yylex,最終返回結(jié)果為生成計(jì)算模塊輸入輸出數(shù)據(jù)說明。
權(quán)利要求
1.基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法,其特征在于,包括以下兩個(gè)階段第一階段,針對不同的程序設(shè)計(jì)語言分別構(gòu)造面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器;其中,計(jì)算模塊輸入輸出要素模型包括過程、變量、常量和格式四種實(shí)體, 過程實(shí)體包括名稱、類型、父過程和子過程集合屬性;變量和常量實(shí)體均包括名稱、類型、維度、值和所在過程屬性;格式實(shí)體包括格式項(xiàng)、項(xiàng)格式描述和控制格式描述屬性;格式項(xiàng)為常量或變量,或者是兩者的組合;(1)面向計(jì)算模塊輸入輸出要素的詞法分析器構(gòu)造,包括下列步驟a)標(biāo)記分類基于所述計(jì)算模塊輸入輸出要素模型,將計(jì)算模塊采用的程序設(shè)計(jì)語言所涉及的字符分為標(biāo)識符、整型常數(shù)、實(shí)型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符、控制格式描述符、注釋、空白字符和其它字符;b)定義詞法標(biāo)記根據(jù)計(jì)算模塊程序設(shè)計(jì)語言的詞法規(guī)則,將所述標(biāo)識符、整型常數(shù)、 實(shí)型常數(shù)、數(shù)據(jù)格式描述符、控制格式描述符、注釋和空白字符分別定義為一種標(biāo)記;將所述數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字和讀寫操作關(guān)鍵字,每個(gè)關(guān)鍵字定義為一種標(biāo)記;c)對標(biāo)記添加詞法動(dòng)作對于語法分析有用的標(biāo)記,包括標(biāo)識符、整型常數(shù)、實(shí)型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符和控制格式描述符標(biāo)記,記錄并將標(biāo)記值傳遞給語法分析器,返回標(biāo)記類型;對語法分析無用的標(biāo)記,包括注釋、空白字符標(biāo)記和其它字符作丟棄處理;d)根據(jù)上述詞法標(biāo)記及其詞法動(dòng)作,通過編程或詞法分析器自動(dòng)化生成工具的方式實(shí)現(xiàn)面向計(jì)算模塊輸入輸出要素的詞法分析器;(2)面向計(jì)算模塊輸入輸出要素的語法分析器構(gòu)造,包括下列步驟i)基于所述計(jì)算模塊輸入輸出要素模型,找出計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu), 包括程序結(jié)構(gòu)、變量定義語句、常量定義語句、循環(huán)結(jié)構(gòu)、文件操作語句、讀寫操作語句和格式語句; )描述計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu);iii)對計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)添加語義動(dòng)作在程序結(jié)構(gòu)語法描述中,提取過程信息,包括名稱和類型,將該過程加入過程表并設(shè)置為當(dāng)前過程;在變量定義語法描述中,提取變量信息,包括名稱、類型和所在過程,將該變量加入變量表;在常量定義語法描述中,提取常量信息,包括名稱、類型和所在過程,將該常量加入常量表;在循環(huán)結(jié)構(gòu)語法描述中,在循環(huán)結(jié)構(gòu)開始處,計(jì)算循環(huán)次數(shù),設(shè)置循環(huán)計(jì)數(shù)器為循環(huán)次數(shù),若循環(huán)次數(shù)為變量,則設(shè)置為自定義默認(rèn)循環(huán)次數(shù);在循環(huán)結(jié)構(gòu)結(jié)束處,設(shè)置循環(huán)計(jì)數(shù)器為0;在打開文件語句語法描述中,提取所打開文件的信息,包括文件名和路徑,在指定目錄創(chuàng)建同名文件,并設(shè)置該文件為當(dāng)前文件;在關(guān)閉文件語句語法描述中,設(shè)置當(dāng)前文件為空;在讀操作語法描述中,提取當(dāng)前讀操作的設(shè)備、讀操作實(shí)體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找讀操作實(shí)體列表中的變量和常量,進(jìn)行處理和重組織后,將讀操作實(shí)體列表中的各個(gè)變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;在寫操作語法描述中,提取當(dāng)前寫操作的設(shè)備、寫操作實(shí)體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找寫操作實(shí)體列表中的變量和常量,進(jìn)行處理和重組織后,將寫操作實(shí)體列表中的各個(gè)變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;iv)根據(jù)上述計(jì)算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)的描述及其語義動(dòng)作,通過編程或語法分析器自動(dòng)化生成工具的方式實(shí)現(xiàn)語法分析器;第二階段,計(jì)算模塊實(shí)例輸入輸出數(shù)據(jù)解析階段以所述計(jì)算模塊實(shí)例源代碼為輸入, 利用第一階段構(gòu)造的面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動(dòng)生成輸入輸出數(shù)據(jù)說明,具體步驟如下1)根據(jù)計(jì)算模塊實(shí)例所采用的程序設(shè)計(jì)語言,選擇第一階段中構(gòu)造的相應(yīng)語言的面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器;如果沒有相應(yīng)語言的詞法分析器和語法分析器,則重復(fù)第一階段所有步驟;2)讀取計(jì)算模塊源代碼文件到字符流中;3)創(chuàng)建詞法分析器實(shí)例,以所述字符流作為輸入;4)調(diào)用詞法分析器實(shí)例詞法分析操作,返回結(jié)果為標(biāo)記流;5)創(chuàng)建語法分析器實(shí)例,以所述標(biāo)記流為輸入;6)調(diào)用語法分析器實(shí)例語法分析操作,返回結(jié)果為生成計(jì)算模塊輸入輸出數(shù)據(jù)說明。
全文摘要
本發(fā)明公開一種基于代碼分析的計(jì)算模塊輸入輸出數(shù)據(jù)自動(dòng)解析方法,屬于計(jì)算機(jī)和信息技術(shù)領(lǐng)域。針對計(jì)算模塊輸入輸出數(shù)據(jù)說明手工編寫繁瑣和自動(dòng)生成不夠詳細(xì)的問題,基于本發(fā)明提出的計(jì)算模塊輸入輸出要素模型,包括過程、變量、常量和格式四種對象,針對不同的程序設(shè)計(jì)語言分別構(gòu)造面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器。以計(jì)算模塊實(shí)例源代碼為輸入,利用面向計(jì)算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動(dòng)生成輸入輸出數(shù)據(jù)說明,包括數(shù)據(jù)的名稱、類型、結(jié)構(gòu)和格式,輸入輸出類別、設(shè)備名稱和位置。本發(fā)明主要用于計(jì)算模塊的共享和重用,提高了計(jì)算模塊輸入輸出數(shù)據(jù)說明編寫的效率和信息粒度。
文檔編號G06F9/45GK102541614SQ201110457068
公開日2012年7月4日 申請日期2011年12月31日 優(yōu)先權(quán)日2011年12月31日
發(fā)明者溫永寧, 盛業(yè)華, 胡迪, 閭國年 申請人:南京師范大學(xué)