两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法

文檔序號:6444646閱讀:269來源:國知局
專利名稱:基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法
基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法技術(shù)領(lǐng)域
本發(fā)明屬于計算機和信息技術(shù)領(lǐng)域,特別涉及計算模塊輸入輸出數(shù)據(jù)解析的方法。
背景技術(shù)
隨著計算機和信息技術(shù)的發(fā)展,各種程序設(shè)計語言不斷出現(xiàn)、發(fā)展和更新,各行業(yè)根據(jù)該領(lǐng)域的特點,選用不同的語言,開發(fā)了大量的計算機程序或軟件。其中,一些程序中關(guān)于數(shù)據(jù)處理和計算的部分或模塊在行業(yè)領(lǐng)域較為基礎(chǔ)和實用。雖然DCOM、CORBA、Web服務(wù)等分布式技術(shù)為計算模塊的共享和重用提供了有效的技術(shù),XML作為網(wǎng)絡(luò)上通用的數(shù)據(jù)交換格式,為計算模塊間的數(shù)據(jù)交換提供有效的方法。但是,計算模塊的有效共享和正確運行的關(guān)鍵在于其輸入輸出數(shù)據(jù)的說明。由于計算模塊本身輸入輸出數(shù)據(jù)的結(jié)構(gòu)和格式各異,大多由模塊編寫者或發(fā)布者手工編寫輸入輸出數(shù)據(jù)的說明,有的計算模塊甚至沒有任何說明。一些集成開發(fā)環(huán)境和工具,如Visual Studi0、EclipSe,能夠根據(jù)代碼生成部分注釋或說明,其缺點在于生成的注釋或說明主要是函數(shù)或方法名稱、輸入輸出數(shù)據(jù)名稱及類型。當(dāng)輸入輸出數(shù)據(jù)是復(fù)雜類型或文件時,并不涉及數(shù)據(jù)具體的結(jié)構(gòu)和格式。從而,造成了大量計算模塊的閑置、無法或難以共享和重用,相同或相近功能計算模塊的重復(fù)開發(fā)。
詞法分析和語法分析是編譯過程的兩個階段,可以實現(xiàn)程序設(shè)計語言單詞結(jié)構(gòu)和語法結(jié)構(gòu)的識別與處理。詞法分析是指將字符序列轉(zhuǎn)換為標(biāo)記序列的過程。進(jìn)行詞法分析的程序或者函數(shù)叫做詞法分析器。語法分析是指根據(jù)某種給定的形式文法對標(biāo)記序列進(jìn)行分析并確定其語法結(jié)構(gòu)的過程。進(jìn)行語法分析的程序或者函數(shù)叫做語法分析器。語法分析器通常使用一個獨立的詞法分析器從輸入字符中分離出一個個標(biāo)記,并將標(biāo)記流作為其輸入。實際應(yīng)用中,詞法分析器和語法分析器可以手工編寫,也可以使用工具自動生成。其中,Lex類和^cc類工具分別是詞法分析器和語法分析器自動生成工具中應(yīng)用最為廣泛的工具。目前,尚未見到將詞法分析和語法分析方法、技術(shù)應(yīng)用到計算模塊輸入輸出數(shù)據(jù)的結(jié)構(gòu)和格式解析方面。發(fā)明內(nèi)容
為了解決當(dāng)前計算模塊共享和重用過程中,計算模塊編寫者或發(fā)布者手工編寫輸入輸出數(shù)據(jù)說明繁瑣、采用注釋生成工具生成的計算模塊輸入輸出數(shù)據(jù)說明不夠詳細(xì),僅包括輸入輸出數(shù)據(jù)及其類型,而不包括輸入輸出數(shù)據(jù)的具體結(jié)構(gòu)和格式的問題,本發(fā)明的目的是提供一種計算模塊輸入輸出數(shù)據(jù)自動解析方法,該方法不僅能夠自動解析、生成計算模塊源代碼中輸入輸出數(shù)據(jù)的說明,而且生成的輸入輸出數(shù)據(jù)說明包括數(shù)據(jù)的名稱、類型、結(jié)構(gòu)和格式信息,能夠滿足計算模塊共享和重用過程中對輸入輸出數(shù)據(jù)說明的要求。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法,包括以下兩個階段 第一階段,針對不同的程序設(shè)計語言分別構(gòu)造面向計算模塊輸入輸出要素的詞法分析4器和語法分析器;其中,計算模塊輸入輸出要素模型包括過程、變量、常量和格式四種實體, 過程實體包括名稱、類型、父過程和子過程集合屬性;變量和常量實體均包括名稱、類型、維度、值和所在過程屬性;格式實體包括格式項、項格式描述和控制格式描述屬性;格式項為常量或變量,或者是兩者的組合;(1)面向計算模塊輸入輸出要素的詞法分析器構(gòu)造,包括下列步驟a)標(biāo)記分類基于所述計算模塊輸入輸出要素模型,將計算模塊采用的程序設(shè)計語言所涉及的字符分為標(biāo)識符、整型常數(shù)、實型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符、控制格式描述符、注釋、空白字符和其它字符;b)定義詞法標(biāo)記根據(jù)計算模塊程序設(shè)計語言的詞法規(guī)則,將所述標(biāo)識符、整型常數(shù)、 實型常數(shù)、數(shù)據(jù)格式描述符、控制格式描述符、注釋和空白字符分別定義為一種標(biāo)記;將所述數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字和讀寫操作關(guān)鍵字,每個關(guān)鍵字定義為一種標(biāo)記;c)對標(biāo)記添加詞法動作對于語法分析有用的標(biāo)記,包括標(biāo)識符、整型常數(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)記及其詞法動作,通過編程或詞法分析器自動化生成工具的方式實現(xiàn)面向計算模塊輸入輸出要素的詞法分析器;(2)面向計算模塊輸入輸出要素的語法分析器構(gòu)造,包括下列步驟i)基于所述計算模塊輸入輸出要素模型,找出計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu), 包括程序結(jié)構(gòu)、變量定義語句、常量定義語句、循環(huán)結(jié)構(gòu)、文件操作語句、讀寫操作語句和格式語句; )描述計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu); iii)對計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)添加語義動作 在程序結(jié)構(gòu)語法描述中,提取過程信息,包括名稱和類型,將該過程加入過程表并設(shè)置為當(dāng)前過程;在變量定義語法描述中,提取變量信息,包括名稱、類型和所在過程,將該變量加入變量表;在常量定義語法描述中,提取常量信息,包括名稱、類型和所在過程,將該常量加入常量表;在循環(huán)結(jié)構(gòu)語法描述中,在循環(huán)結(jié)構(gòu)開始處,計算循環(huán)次數(shù),設(shè)置循環(huán)計數(shù)器為循環(huán)次數(shù),若循環(huán)次數(shù)為變量,則設(shè)置為自定義默認(rèn)循環(huán)次數(shù);在循環(huán)結(jié)構(gòu)結(jié)束處,設(shè)置循環(huán)計數(shù)器為0;在打開文件語句語法描述中,提取所打開文件的信息,包括文件名和路徑,在指定目錄創(chuàng)建同名文件,并設(shè)置該文件為當(dāng)前文件;在關(guān)閉文件語句語法描述中,設(shè)置當(dāng)前文件為空;在讀操作語法描述中,提取當(dāng)前讀操作的設(shè)備、讀操作實體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找讀操作實體列表中的變量和常量,進(jìn)行處理和重組織后,將讀操作實體列表中的各個變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;在寫操作語法描述中,提取當(dāng)前寫操作的設(shè)備、寫操作實體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找寫操作實體列表中的變量和常量,進(jìn)行處理和重組織后,將寫操作實體列表中的各個變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;iv)根據(jù)上述計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)的描述及其語義動作,通過編程或語法分析器自動化生成工具的方式實現(xiàn)語法分析器;第二階段,計算模塊實例輸入輸出數(shù)據(jù)解析階段以所述計算模塊實例源代碼為輸入, 利用第一階段構(gòu)造的面向計算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動生成輸入輸出數(shù)據(jù)說明,具體步驟如下1)根據(jù)計算模塊實例所采用的程序設(shè)計語言,選擇第一階段中構(gòu)造的相應(yīng)語言的面向計算模塊輸入輸出要素的詞法分析器和語法分析器;如果沒有相應(yīng)語言的詞法分析器和語法分析器,則重復(fù)第一階段所有步驟;2)讀取計算模塊源代碼文件到字符流中;3)創(chuàng)建詞法分析器實例,以字符流作為輸入;4)調(diào)用詞法分析器實例詞法分析操作,返回結(jié)果為標(biāo)記流;5)創(chuàng)建語法分析器實例,以標(biāo)記流為輸入;6)調(diào)用語法分析器實例語法分析操作,返回結(jié)果為生成計算模塊輸入輸出數(shù)據(jù)說明。
所述面向計算模塊輸入輸出要素的詞法分析器和語法分析器構(gòu)造階段和計算模塊實例輸入輸出數(shù)據(jù)解析階段是兩個順序、獨立的過程;如果已經(jīng)構(gòu)造了或獲取了計算模塊實例所需的面向計算模塊輸入輸出要素的詞法分析器和語法分析器,則可跳過第一階段,直接進(jìn)入第二階段。
本發(fā)明基于代碼分析的計算模塊的輸入輸出數(shù)據(jù)自動解析方法,所述面向計算模塊輸入輸出要素的詞法分析器和語法分析器,可以根據(jù)不同計算模塊所采用的程序設(shè)計語言,設(shè)計適用于不同程序設(shè)計語言的詞法分析器和語法分析器。因此,本發(fā)明基于代碼分析的計算模塊的輸入輸出數(shù)據(jù)自動解析方法,廣泛適用于各種程序設(shè)計語言編寫的計算模塊。


下面結(jié)合附圖和實施例對本發(fā)明進(jìn)一步說明。
圖1為本發(fā)明提出的計算模塊輸入輸出要素模型圖。
圖2為本發(fā)明的計算模塊輸入輸出數(shù)據(jù)自動解析方法的流程圖。
具體實施方式
下面對本發(fā)明實例中的技術(shù)方案進(jìn)行清楚、完整的描述。顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法,該方法提出的計算模塊輸入輸出要素模型包括過程、變量、常量和格式四種實體,過程實體包括名稱、類型、父過程和子過程集合屬性;變量和常量實體均包括名稱、類型、維度、值和所在過程屬性;格式實體包括格式項、項格式描述和控制格式描述屬性;格式項為常量或變量,或者是兩者的組合,如圖1所示?;谏鲜鲇嬎隳K輸入輸出要素模型,本發(fā)明基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法包括兩個階段,如圖2所示。本實施例計算模塊采用 Fortran語言編寫,具體步驟包括1、面向計算模塊輸入輸出要素的詞法分析器和語法分析器構(gòu)造階段基于本發(fā)明提出的計算模塊輸入輸出要素模型,針對該計算模塊采用的程序設(shè)計語言Fortran分別構(gòu)造面向計算模塊輸入輸出要素的詞法分析器和語法分析器;2、 計算模塊實例輸入輸出數(shù)據(jù)解析階段以計算模塊源代碼為輸入,利用面向計算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動生成輸入輸出數(shù)據(jù)說明。在第一階段中,本實施例采用Lex類工具自動生成詞法分析器、^cc類工具自動生成語法分析器。
本實施例計算模塊實例源代碼如下 ! 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第一階段面向計算模塊輸入輸出要素的詞法分析器與語法分析器構(gòu)造 1、面向計算模塊輸入輸出要素的詞法分析器構(gòu)造,包括下列步驟 a)標(biāo)記分類基于所述計算模塊輸入輸出要素模型,將本實施例計算模塊采用的程序設(shè)計語言Fortran中所涉及的字符分為標(biāo)識符、整型常數(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ù)(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)記添加詞法動作對于語法分析有用的標(biāo)記,包括標(biāo)識符 (identifier)、整型常數(shù)(int_Const)、實型常數(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)記的詞法動作按Lex語法規(guī)范進(jìn)行表達(dá),添加到相應(yīng)的詞法標(biāo)記處,并保存到LexFortran. Iex文件中。
d)采用支持《1語言的Lex類詞法分析器自動生成工具,將Lex詞法文件 FortranLexer. Iex自動生成面向計算模塊輸入輸出要素的詞法分析器R)rtranLexer。
2、面向計算模塊輸入輸出要素的語法分析器構(gòu)造,包括下列步驟a)基于所述計算模塊輸入輸出要素模型,找出計算模塊輸入輸出要素相關(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)描述計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)本實施例采用^cc語法規(guī)范對計算模塊實例中所涉及的計算模塊輸入輸出要素相關(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)對計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)添加語義動作 定義語義動作輔助類、輔助類實例、輔助變量,包括過程類ftOcess、變量類Variable、過程實例列表processList、變量實例列表variableList、循環(huán)計數(shù)器loopTimes、當(dāng)前程序currentProgram、當(dāng)前文件currentFile、文件流實例fs和寫入流實例sw ;過程類 Process 包括 Name、Type、Parent 禾口 Children 屬性;變量類 Variable 包括 Name、Type、 Demension、HValue 禾口 LocProcess 屬性;在程序結(jié)構(gòu)語法描述中,嵌套語義動作,提取過程信息,包括名稱和類型,實例化過程類并將其添加到過程實例列表processList中;設(shè)置當(dāng)前過程實例currentProcess為此過程實例;在變量定義語句語法描述中,嵌套語義動作,提取變量信息,包括名稱、類型、所在過程,實例化變量類并將其添加到變量實例列表variabelList中;在循環(huán)結(jié)構(gòu)語法描述中,嵌套語語義動作,在循環(huán)結(jié)構(gòu)開始處,計算循環(huán)次數(shù),設(shè)置循環(huán)計數(shù)器loopTimes為循環(huán)次數(shù),若循環(huán)次數(shù)為變量,則設(shè)置為自定義默認(rèn)循環(huán)次數(shù);在循環(huán)結(jié)構(gòu)結(jié)束處,設(shè)置循環(huán)計數(shù)器loopTimes為0,即IoopTimes=O ;在打開文件語句語法描述中,嵌套語義動作,提取所打開文件的信息,包括文件名和路徑,在指定目錄創(chuàng)建同名文件,并設(shè)置當(dāng)前文件currentFile為此文件;在關(guān)閉文件語句語法描述中,嵌套語義動作,設(shè)置當(dāng)前文件currentFile為空,關(guān)閉文件流實例fs ;在讀操作語法描述中,嵌套語義動作,提取當(dāng)前讀操作的設(shè)備、讀操作實體列表、數(shù)據(jù)格式描述符和控制格式描述符;若讀操作設(shè)備為鍵盤,則設(shè)置當(dāng)前文件currentFile為標(biāo)準(zhǔn)輸入設(shè)備stdin,即currentFile= "stdin";在變量實例列表variableList中查找讀操作實體列表中的變量,進(jìn)行處理和重組織后,將讀操作實體列表中的各個變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;在寫操作語法描述中,嵌套語義動作,提取當(dāng)前寫操作的設(shè)備、寫操作實體列表、數(shù)據(jù)格式描述符和控制格式描述符;若寫操作設(shè)備為鍵盤,則設(shè)置當(dāng)前文件currentFile為標(biāo)準(zhǔn)輸出設(shè)備stdout,即currentFile= 〃stdout〃 ;在變量實例列表variableList中查找寫操作實體列表中的變量,進(jìn)行處理和重組織后,將寫操作實體列表中的各個變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;d)采用支持C#語言的^cc類語法分析器自動生成工具,設(shè)置生成命令參數(shù)使語法分析器與詞法分析器配合使用,將編寫的^cc語法文件PGFortran. y自動生成面向計算模塊輸入輸出要素的語法分析器Parser ;第二階段計算模塊實例輸入輸出數(shù)據(jù)解析本實施例采用C#語言編寫一個控制臺程序?qū)崿F(xiàn)計算模塊輸入輸出數(shù)據(jù)的自動解析, 具體步驟為1、選擇、采用本實施例第一階段所構(gòu)造的面向計算模塊輸入輸出要素的詞法分析器 FortranLexer 禾口語法分析器 Parser ;2、讀取計算模塊源代碼文件到字符流file中;3、創(chuàng)建詞法分析器實例scnr,以字符流file作為輸入;4、創(chuàng)建語法分析器實例parser;5、設(shè)置語法分析器實例parser的掃描器屬性farmer為步驟3中創(chuàng)建的詞法分析器實例scnr ;6、調(diào)用語法分析器實例parser的語法分析操作Parse,將在內(nèi)部自動調(diào)用詞法分析器實例scnr的詞法分析操作yylex,最終返回結(jié)果為生成計算模塊輸入輸出數(shù)據(jù)說明。
權(quán)利要求
1.基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法,其特征在于,包括以下兩個階段第一階段,針對不同的程序設(shè)計語言分別構(gòu)造面向計算模塊輸入輸出要素的詞法分析器和語法分析器;其中,計算模塊輸入輸出要素模型包括過程、變量、常量和格式四種實體, 過程實體包括名稱、類型、父過程和子過程集合屬性;變量和常量實體均包括名稱、類型、維度、值和所在過程屬性;格式實體包括格式項、項格式描述和控制格式描述屬性;格式項為常量或變量,或者是兩者的組合;(1)面向計算模塊輸入輸出要素的詞法分析器構(gòu)造,包括下列步驟a)標(biāo)記分類基于所述計算模塊輸入輸出要素模型,將計算模塊采用的程序設(shè)計語言所涉及的字符分為標(biāo)識符、整型常數(shù)、實型常數(shù)、數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字、讀寫操作關(guān)鍵字、數(shù)據(jù)格式描述符、控制格式描述符、注釋、空白字符和其它字符;b)定義詞法標(biāo)記根據(jù)計算模塊程序設(shè)計語言的詞法規(guī)則,將所述標(biāo)識符、整型常數(shù)、 實型常數(shù)、數(shù)據(jù)格式描述符、控制格式描述符、注釋和空白字符分別定義為一種標(biāo)記;將所述數(shù)據(jù)類型關(guān)鍵字、控制結(jié)構(gòu)關(guān)鍵字、文件操作關(guān)鍵字和讀寫操作關(guān)鍵字,每個關(guān)鍵字定義為一種標(biāo)記;c)對標(biāo)記添加詞法動作對于語法分析有用的標(biāo)記,包括標(biāo)識符、整型常數(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)記及其詞法動作,通過編程或詞法分析器自動化生成工具的方式實現(xiàn)面向計算模塊輸入輸出要素的詞法分析器;(2)面向計算模塊輸入輸出要素的語法分析器構(gòu)造,包括下列步驟i)基于所述計算模塊輸入輸出要素模型,找出計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu), 包括程序結(jié)構(gòu)、變量定義語句、常量定義語句、循環(huán)結(jié)構(gòu)、文件操作語句、讀寫操作語句和格式語句; )描述計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu);iii)對計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)添加語義動作在程序結(jié)構(gòu)語法描述中,提取過程信息,包括名稱和類型,將該過程加入過程表并設(shè)置為當(dāng)前過程;在變量定義語法描述中,提取變量信息,包括名稱、類型和所在過程,將該變量加入變量表;在常量定義語法描述中,提取常量信息,包括名稱、類型和所在過程,將該常量加入常量表;在循環(huán)結(jié)構(gòu)語法描述中,在循環(huán)結(jié)構(gòu)開始處,計算循環(huán)次數(shù),設(shè)置循環(huán)計數(shù)器為循環(huán)次數(shù),若循環(huán)次數(shù)為變量,則設(shè)置為自定義默認(rèn)循環(huán)次數(shù);在循環(huán)結(jié)構(gòu)結(jié)束處,設(shè)置循環(huán)計數(shù)器為0;在打開文件語句語法描述中,提取所打開文件的信息,包括文件名和路徑,在指定目錄創(chuàng)建同名文件,并設(shè)置該文件為當(dāng)前文件;在關(guān)閉文件語句語法描述中,設(shè)置當(dāng)前文件為空;在讀操作語法描述中,提取當(dāng)前讀操作的設(shè)備、讀操作實體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找讀操作實體列表中的變量和常量,進(jìn)行處理和重組織后,將讀操作實體列表中的各個變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;在寫操作語法描述中,提取當(dāng)前寫操作的設(shè)備、寫操作實體列表、數(shù)據(jù)格式描述符和控制格式描述符;在變量表和常量表中查找寫操作實體列表中的變量和常量,進(jìn)行處理和重組織后,將寫操作實體列表中的各個變量、常量的名稱、類型、數(shù)據(jù)格式描述符和控制格式描述符,寫入當(dāng)前文件中;iv)根據(jù)上述計算模塊輸入輸出要素相關(guān)語法結(jié)構(gòu)的描述及其語義動作,通過編程或語法分析器自動化生成工具的方式實現(xiàn)語法分析器;第二階段,計算模塊實例輸入輸出數(shù)據(jù)解析階段以所述計算模塊實例源代碼為輸入, 利用第一階段構(gòu)造的面向計算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動生成輸入輸出數(shù)據(jù)說明,具體步驟如下1)根據(jù)計算模塊實例所采用的程序設(shè)計語言,選擇第一階段中構(gòu)造的相應(yīng)語言的面向計算模塊輸入輸出要素的詞法分析器和語法分析器;如果沒有相應(yīng)語言的詞法分析器和語法分析器,則重復(fù)第一階段所有步驟;2)讀取計算模塊源代碼文件到字符流中;3)創(chuàng)建詞法分析器實例,以所述字符流作為輸入;4)調(diào)用詞法分析器實例詞法分析操作,返回結(jié)果為標(biāo)記流;5)創(chuàng)建語法分析器實例,以所述標(biāo)記流為輸入;6)調(diào)用語法分析器實例語法分析操作,返回結(jié)果為生成計算模塊輸入輸出數(shù)據(jù)說明。
全文摘要
本發(fā)明公開一種基于代碼分析的計算模塊輸入輸出數(shù)據(jù)自動解析方法,屬于計算機和信息技術(shù)領(lǐng)域。針對計算模塊輸入輸出數(shù)據(jù)說明手工編寫繁瑣和自動生成不夠詳細(xì)的問題,基于本發(fā)明提出的計算模塊輸入輸出要素模型,包括過程、變量、常量和格式四種對象,針對不同的程序設(shè)計語言分別構(gòu)造面向計算模塊輸入輸出要素的詞法分析器和語法分析器。以計算模塊實例源代碼為輸入,利用面向計算模塊輸入輸出要素的詞法分析器和語法分析器對其進(jìn)行詞法分析和語法分析,自動生成輸入輸出數(shù)據(jù)說明,包括數(shù)據(jù)的名稱、類型、結(jié)構(gòu)和格式,輸入輸出類別、設(shè)備名稱和位置。本發(fā)明主要用于計算模塊的共享和重用,提高了計算模塊輸入輸出數(shù)據(jù)說明編寫的效率和信息粒度。
文檔編號G06F9/45GK102541614SQ201110457068
公開日2012年7月4日 申請日期2011年12月31日 優(yōu)先權(quán)日2011年12月31日
發(fā)明者溫永寧, 盛業(yè)華, 胡迪, 閭國年 申請人:南京師范大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
得荣县| 抚远县| 芦山县| 托里县| 山东省| 扬中市| 伊吾县| 万山特区| 永泰县| 崇义县| 大兴区| 梅河口市| 灵寿县| 吉首市| 瓮安县| 高淳县| 元朗区| 崇仁县| 晴隆县| 集贤县| 常宁市| 潮安县| 福鼎市| 翁牛特旗| 曲阜市| 平泉县| 兴隆县| 吉安市| 玛沁县| 津南区| 保山市| 临安市| 方山县| 安泽县| 循化| 富民县| 张家口市| 大同市| 共和县| 玛多县| 资源县|