資源簡介
編譯原理實驗三
一、討論Oberon-0 語言的特點
1、保留字與關(guān)鍵字的概念區(qū)分
保留字只要是用在程序語言的層次架構(gòu)用途上,比如說IF,THEN,ELSIF,用在程序
的循環(huán)、分支、判斷條件、程序塊等組織上,它是程序語言中預(yù)定義的,具某些特殊意
義規(guī)范的單詞。保留字側(cè)重于強調(diào)不能被用戶作為定義的名字。
關(guān)鍵字是一個只被用在某一部分的程序編程中,關(guān)鍵字在程序語言中同樣有特殊的
意義特征。多用于類型定義,如在Oberon中,integer 便是用來定義變量類型的關(guān)鍵
字。還有其他的功能如作為程序語言中的某個特定函數(shù)的名稱,如 write,read等(在
Oberon中).
不同的語言的關(guān)鍵字和保留字的概念區(qū)分是不一樣的。例如在C,JAVA中, if,else,
while 這些都是關(guān)鍵字的范圍,而在Oberon 中是保留字的范圍。在C 語言風(fēng)格的程
序語言中,是將程序控制塊的那些保留字也一并歸為關(guān)鍵字的。(這些關(guān)鍵字不可以作
為變量,函數(shù)的名稱,也就是不可以作為程序員使用的標(biāo)示符)。
2、Oberon與C、Java的差別
a) 在每一一個主要的函數(shù)過程procedure 中,Oberon有begin 和end 來標(biāo)志,而
在C 和java中一般是用花括號來標(biāo)志。
b) 在定義變量時,Oberon 是在分號之后,也就是最后在給出具體是什么類型的,而
在C、Java中一般是在變量的前面就給出了類型,只是 Oberon會先用var說明
這是一個變量。
c) Oberon中的可用到數(shù)據(jù)結(jié)構(gòu)主要有數(shù)組,類似C 中的結(jié)構(gòu)體,類型選擇比較少。
3
二、文法二義性討論
該文法沒有二義性。在其他的語言中出現(xiàn)的二義性類型中,比如表達式的parsing tree
(存在兩顆或以上的parsing trees)的二義性,需要用算符優(yōu)先關(guān)系來確定的和if-else 的
匹配問題導(dǎo)致的二義性問題,都在該文法中的EBNF定義中被消除掉了。
1、對于表達式的二義性處理:
simple_expression = ["+" | "-"] term {("+" | "-" | "OR") term} ;
term = factor {("*" | "DIV" | "MOD" | "&") factor} ;
從中,可以看出*和 DIV、MOD 這些一定在+-之前就進行運算了。通過將表達式的將
+-和*DIV、MOD 等用不同層次的表達式進行定義,消除了這一二義性。
2、對于if-else匹配出現(xiàn)二義性的處理:

代碼片段和文件信息
public?class?Lexical
{
??/*?terminals?*/
??public?static?final?int?Operator?=?1;
??public?static?final?int?Keyword?=?2; //關(guān)鍵字
??public?static?final?int?ReservedWord?=?3;
??public?static?final?int?Identifier?=?4;
??public?static?final?int?Seperator?=?5;
??public?static?final?int?Number?=?6;
??public?static?final?int?Comment?=?7;
??public?static?final?int?WhiteSpace?=?8;
??public?static?final?int?EOF?=?0;
??
??public?static?final?int?legalSymbol?=?-1;
??public?static?final?int?IllegalInteger?=?-2; //no?blank?before?identifier
??public?static?final?int?IllegalItegerRange?=?-3; //more?than?12
??public?static?final?int?IllegalOctal?=?-4;
??public?static?final?int?IllegalIdentifierLength?=?-5;
??public?static?final?int?MismatchedComment?=?-6; //未匹配 ??
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-06-27?00:24??實驗三\
?????目錄???????????0??2018-06-27?20:17??實驗三\ex1\
?????文件??????235852??2018-06-27?20:16??實驗三\ex1\Oberon-0.pdf
?????文件??????????80??2018-06-27?20:17??實驗三\ex1\readme.txt
?????目錄???????????0??2018-06-27?22:22??實驗三\ex1\testcases\
?????文件?????????352??2018-06-26?23:57??實驗三\ex1\testcases\factorial.obr
?????目錄???????????0??2018-06-27?21:46??實驗三\ex2\
?????目錄???????????0??2018-06-27?00:24??實驗三\ex2\bin\
?????目錄???????????0??2018-06-27?00:24??實驗三\ex2\bin\exceptions\
?????文件?????????669??2018-06-27?21:34??實驗三\ex2\bin\exceptions\IllegalIdentifierLengthException.class
?????文件?????????633??2018-06-27?21:34??實驗三\ex2\bin\exceptions\IllegalIntegerException.class
?????文件?????????653??2018-06-27?21:34??實驗三\ex2\bin\exceptions\IllegalIntegerRangeException.class
?????文件?????????625??2018-06-27?21:34??實驗三\ex2\bin\exceptions\IllegalOctalException.class
?????文件?????????629??2018-06-27?21:34??實驗三\ex2\bin\exceptions\IllegalSymbolException.class
?????文件?????????604??2018-06-27?21:34??實驗三\ex2\bin\exceptions\LexicalException.class
?????文件?????????645??2018-06-27?21:34??實驗三\ex2\bin\exceptions\MismatchedCommentException.class
?????文件?????????374??2018-06-27?21:34??實驗三\ex2\bin\exceptions\MissingLeftParenthesisException.class
?????文件?????????349??2018-06-27?21:34??實驗三\ex2\bin\exceptions\MissingOperandException.class
?????文件?????????352??2018-06-27?21:34??實驗三\ex2\bin\exceptions\MissingOperatorException.class
?????文件?????????377??2018-06-27?21:34??實驗三\ex2\bin\exceptions\MissingRightParenthesisException.class
?????文件?????????597??2018-06-27?21:34??實驗三\ex2\bin\exceptions\OberonException.class
?????文件?????????773??2018-06-27?21:34??實驗三\ex2\bin\exceptions\ParameterMismatchedException.class
?????文件?????????601??2018-06-27?21:34??實驗三\ex2\bin\exceptions\SemanticException.class
?????文件?????????612??2018-06-27?21:34??實驗三\ex2\bin\exceptions\SyntacticException.class
?????文件?????????353??2018-06-27?21:34??實驗三\ex2\bin\exceptions\TypeMismatchedException.class
?????文件?????????735??2018-06-27?21:34??實驗三\ex2\bin\Lexical.class
?????文件????????1745??2018-06-27?21:34??實驗三\ex2\bin\Main.class
?????文件???????13133??2018-06-27?21:34??實驗三\ex2\bin\OberonScanner.class
?????文件?????????190??2018-06-26?19:42??實驗三\ex2\build.bat
?????文件??????????70??2018-06-26?19:39??實驗三\ex2\gen.bat
?????目錄???????????0??2018-06-27?00:24??實驗三\ex2\jflex\
............此處省略144個文件信息
評論
共有 條評論