[發(fā)明專利]一種基于Java的CUP構造編譯器的實現(xiàn)方法在審
| 申請?zhí)枺?/td> | 202010695130.7 | 申請日: | 2020-07-19 |
| 公開(公告)號: | CN114020269A | 公開(公告)日: | 2022-02-08 |
| 發(fā)明(設計)人: | 楊際榮 | 申請(專利權)人: | 江蘇華揚信息科技有限公司 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 212009 江蘇省鎮(zhèn)江市新區(qū)*** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 java cup 構造 編譯器 實現(xiàn) 方法 | ||
一種基于Java的CUP構造編譯器的實現(xiàn)方法:介紹了編譯器自動生成器的基本原理,探討了基于Java的CUP及其出錯恢復機制,通過設計一個簡單計算器,闡述了利用CUP(Constructor ofUseful Parsers)構造編譯器的方法。
技術領域
本發(fā)明涉及一種基于Java的CUP構造編譯器的實現(xiàn)方法,此技術主要是了利用CUP(Constructor ofUseful Parsers)構造編譯器的方法。
背景技術
編譯程序是計算機系統(tǒng)軟件的一個重要組成部分,許多場合我們都會面臨自己設計編譯器的問題。
作為計算機應用中最常用的工具之一,編譯器可以將我們所習慣使用的自然語言轉換為等價的計算機可識別的數(shù)據(jù)結構。由于編譯程序基本都是語法制導的,因此其分析部分的一項重要內容便是語法結構的識別。具體的分析過程一般先由詞法分析器讀人源程序的字符,然后利用語法分析器讀人前面詞法分析器輸出的這些單詞流,并建立.相應源程序的語法結構,語義分析器接著根據(jù)語法結構分析、檢查程序的靜態(tài)語義。
詞法分析器、語法分析器和語義分析器是編譯器的三個重要組成模塊,另外還有一些模塊會對我們構造編譯器產(chǎn)生積極作用,例如中間代碼生成器、中間代碼優(yōu)化器和代碼生成器等,但這幾個模塊我們可以根據(jù)具體情況決定是否選擇使用。程序設計人員在設計時完全靠手工來進行詞法分析器、語法分析器的設計,毫無疑問其工作量繁重且效率不高。針對這種情況。我們可以在設計時有針對性的選擇一些自動生成工具。利用這些詞法分析器、語法分析器自動生成工具設計人員可以脫離具體設計細節(jié)。需要做的只是用正則表達式描述清楚這些單詞符號的構成規(guī)則和用上下文無關文法描述清楚語言的語法規(guī)則,然后自動生成工具就會根據(jù)設計人員已描述好的詞法規(guī)則和語法規(guī)則生成對應的詞法分析器和語法分析器。但是這些自動生成工具不能只根據(jù)這些詞法規(guī)則和語法規(guī)則來自動完成語義檢查和生成相應的目標代碼。為了解決這個問題,我們可以根據(jù)需要在分析器自動生成工具中插入代碼.利用這些代碼進行語義檢查并生成目標代碼。通過充分結合自動生成和人工插入代碼的方式,詞法分析器和語法分析器可以很好的實現(xiàn)一個編譯器。
發(fā)明內容
基于上述問題,特此發(fā)明一種基于Java的CUP構造編譯器的實現(xiàn)方法;作為Java運行環(huán)境下一種自動生成工具.CUP(Constructor ofUseful Parsers)與其它自動生成工具工作原理相似:首先讀人按CUP語法規(guī)則編寫的源程序,這些Java源程序代碼段包含了詞法規(guī)則、文法規(guī)則及與此文法規(guī)則相聯(lián)系的語義動作:然后按照這些規(guī)則自動生成該文法Java代碼形式的語法分析器。為了更好的說明CUP源程序的結構,本文以一個簡單實用的計算器為例子,介紹了CUP源程序以及如何利用CUP來設計一個編譯器,此例中我們設定該計算器接受命令行輸入,可以完成若干正整數(shù)的加、減和乘法運算。
具體實現(xiàn)方法
首先對源代碼進行預先聲明; 預先聲明部分規(guī)定如何產(chǎn)生分析器,還提供了運行時的代碼。預先聲明段一般可以根據(jù)具體需要決定是否選擇。上述計算器中預先聲明段包含了包聲明和導入類聲明兩項內容。對于可選的預先聲明項,以若干關鍵字和“(:”開始、“:)”結尾;相應java代碼寫在“{:”和“:)”中間,并會被復制到分析器的類定義中。
第二進行2符號列表定義; 每個CUP源程序中都必須包含符號列表,符號列表為其中包含的終結符和非終結符提供類型說明。終結符的語法格式是:
terminal Classname namel,name2,??;
Classname是符號所對應的java類型,無Classname則被認為是Object類型。該類型的終結符的多個名字可在此Classname后列出來,且各終結符之間以逗號分隔。詞法分析器識別PLUS符號后會將表示PLUS的代碼傳遞給語法分析器;但詞法分析器識別NUMBER后不僅要傳遞表示NUMBER的代碼,還要傳遞具體的值。非終結符與終結符的聲明方式相同。但以nonterminal起始。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于江蘇華揚信息科技有限公司,未經(jīng)江蘇華揚信息科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010695130.7/2.html,轉載請聲明來源鉆瓜專利網(wǎng)。





