我有Java API里面有所有的接口和類,以及類里的方法
成都網(wǎng)站建設(shè)、成都做網(wǎng)站,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向上千企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
賦值操作符:
= 賦值符號(hào)。
+= 加等賦值。
-= 減等賦值。
*= 乘等賦值。
/= 除等賦值。
運(yùn)算操作符:
+ 加運(yùn)算符
- 減運(yùn)算符
* 乘運(yùn)算符
/ 除運(yùn)算符
% 求余運(yùn)算符
++ 自增1運(yùn)算符
-- 自減1運(yùn)算符
關(guān)系操作符:
小于。
= 小于或者等于。
大于。
= 大于或者等于。
== 等于。
!= 不等于(大于或小于)。
邏輯操作符:
?: if-then-else
邏輯與。位操作符。將左右表達(dá)式按二進(jìn)制按位進(jìn)行與操作(同位均為1則該位為1,否則為0)。
與操作。
| 邏輯或。
|| 或操作。
^ XOR。
== 等于
!= 不等于
! 邏輯非操作。
】
Abstract 抽象的
一個(gè)Java語(yǔ)言中的關(guān)鍵字,用在類的聲明中來(lái)指明一個(gè)類是不能被實(shí)例化的,但是可以被其它類繼承。一個(gè)抽象類可以使用抽象方法,抽象方法不需要實(shí)現(xiàn),但是需要在子類中被實(shí)現(xiàn)
break
一個(gè)Java的關(guān)鍵字,用來(lái)改變程序執(zhí)行流程,立刻從當(dāng)前語(yǔ)句的下一句開(kāi)始執(zhí)行從。如果后面跟有一個(gè)標(biāo)簽,則從標(biāo)簽對(duì)應(yīng)的地方開(kāi)始執(zhí)行
case
Java語(yǔ)言的關(guān)鍵字,用來(lái)定義一組分支選擇,如果某個(gè)值和switch中給出的值一樣,就會(huì)從該分支開(kāi)始執(zhí)行。
catch
Java的一個(gè)關(guān)鍵字,用來(lái)聲明當(dāng)try語(yǔ)句塊中發(fā)生運(yùn)行時(shí)錯(cuò)誤或非運(yùn)行時(shí)異常時(shí)運(yùn)行的一個(gè)塊。
char
Java語(yǔ)言的一個(gè)關(guān)鍵字,用來(lái)定義一個(gè)字符類型
continue
一個(gè)Java的關(guān)鍵字,用來(lái)打斷當(dāng)前循環(huán)過(guò)程,從當(dāng)前循環(huán)的最后重新開(kāi)始執(zhí)行,如果后面跟有一個(gè)標(biāo)簽,則從標(biāo)簽對(duì)應(yīng)的地方開(kāi)始執(zhí)行。
do
一個(gè)Java語(yǔ)言的關(guān)鍵字,用來(lái)聲明一個(gè)循環(huán),這個(gè)循環(huán)的結(jié)束條件可以通過(guò)while關(guān)鍵字設(shè)置
double
一個(gè)Java語(yǔ)言的關(guān)鍵字,用來(lái)定義一個(gè)double類型的變量
else
一個(gè)Java語(yǔ)言的關(guān)鍵字,如果if語(yǔ)句的條件不滿足就會(huì)執(zhí)行該語(yǔ)句。
final
一個(gè)Java語(yǔ)言的關(guān)鍵字。你只能定義一個(gè)實(shí)體一次,以后不能改變它或繼承它。更嚴(yán)格的講:一個(gè)final修飾的類不能被子類化,一個(gè)final修飾的方法不能被重寫(xiě),一個(gè)final修飾的變量不能改變其初始值。
finally
一個(gè)Java語(yǔ)言的關(guān)鍵字,用來(lái)執(zhí)行一段代碼不管在前面定義的try語(yǔ)句中是否有異?;蜻\(yùn)行時(shí)錯(cuò)誤發(fā)生。
float
一個(gè)Java語(yǔ)言的關(guān)鍵字,用來(lái)定義一個(gè)浮點(diǎn)數(shù)變量
for
一個(gè)Java語(yǔ)言的關(guān)鍵字,用來(lái)聲明一個(gè)循環(huán)。程序員可以指定要循環(huán)的語(yǔ)句,推出條件和初始化變量。
if
Java編程語(yǔ)言的一個(gè)關(guān)鍵字,用來(lái)生成一個(gè)條件測(cè)試,如果條件為真,就執(zhí)行if下的語(yǔ)句。
implements
Java(TM)編程語(yǔ)言的一個(gè)關(guān)鍵字,在類的聲明中是可選的,用來(lái)指明當(dāng)前類實(shí)現(xiàn)的接口。
import
Java(TM)編程語(yǔ)言的一個(gè)關(guān)鍵字,在源文件的開(kāi)始部分指明后面將要引用的一個(gè)類或整個(gè)包,這樣就不必在使用的時(shí)候加上包的名字。
instanceof
一個(gè)二操作數(shù)的Java(TM)語(yǔ)言關(guān)鍵字,用來(lái)測(cè)試第一個(gè)參數(shù)的運(yùn)行時(shí)類型是否和第二個(gè)參數(shù)兼容。
int
Java(TM)的一個(gè)關(guān)鍵字,用來(lái)定義一個(gè)整形變量
Java(TM)的一個(gè)關(guān)鍵字,用來(lái)定義一系列的方法和常量。它可以被類實(shí)現(xiàn),通過(guò)implements關(guān)鍵字。
long
Java語(yǔ)言的一個(gè)關(guān)鍵字,用來(lái)定義一個(gè)long類型的變量。
private
Java語(yǔ)言的一個(gè)關(guān)鍵字,用在方法或變量的聲中。它表示這個(gè)方法或變量只能被這個(gè)類的其它元素所訪問(wèn)。
protected
Java語(yǔ)言的一個(gè)關(guān)鍵字,在方法和變量的聲明中使用,它表示這個(gè)方法或變量只能被同一個(gè)類中的,子類中的或者同一個(gè)包中的類中的元素所訪問(wèn)。
public
Java語(yǔ)言的一個(gè)關(guān)鍵字,在方法和變量的聲明中使用,它表示這個(gè)方法或變量能夠被其它類中的元素訪問(wèn)。
return
Java語(yǔ)言的一個(gè)關(guān)鍵字,用來(lái)結(jié)束一個(gè)方法的執(zhí)行。它后面可以跟一個(gè)方法聲明中要求的值。
short
Java語(yǔ)言的關(guān)鍵字,用來(lái)定義一個(gè)short類型的變量。
static
Java語(yǔ)言的關(guān)鍵字,用來(lái)定義一個(gè)變量為類變量。類只維護(hù)一個(gè)類變量的拷貝,不管該類當(dāng)前有多少個(gè)實(shí)例。"static" 同樣能夠用來(lái)定義一個(gè)方法為類方法。類方法通過(guò)類名調(diào)用而不是特定的實(shí)例,并且只能操作類變量。
this
Java語(yǔ)言的關(guān)鍵字,用來(lái)代表它出現(xiàn)的類的一個(gè)實(shí)例。this可以用來(lái)訪問(wèn)類變量和類方法。
throw
Java語(yǔ)言的關(guān)鍵字,允許用戶拋出一個(gè)exception對(duì)象或者任何實(shí)現(xiàn)throwable的對(duì)象
throws
Java語(yǔ)言的關(guān)鍵字,用在方法的聲明中來(lái)說(shuō)明哪些異常這個(gè)方法是不處理的,而是提交到程序的更高一層。
transient
Java語(yǔ)言的關(guān)鍵字,用來(lái)表示一個(gè)域不是該對(duì)象串行化的一部分。當(dāng)一個(gè)對(duì)象被串行化的時(shí)候,transient型變量的值不包括在串行化的表示中,然而非transient型的變量是被包括進(jìn)去的。
try
Java語(yǔ)言的關(guān)鍵字,用來(lái)定義一個(gè)可能拋出異常語(yǔ)句塊。如果一個(gè)異常被拋出,一個(gè)可選的catch語(yǔ)句塊會(huì)處理try語(yǔ)句塊中拋出的異常。同時(shí),一個(gè)finally語(yǔ)句塊會(huì)被執(zhí)行,無(wú)論一個(gè)異常是否被拋出。
void
Java語(yǔ)言的關(guān)鍵字,用在Java語(yǔ)言的方法聲明中說(shuō)明這個(gè)方法沒(méi)有任何返回值。"void"也可以用來(lái)表示一句沒(méi)有任何功能的語(yǔ)句。
volatile
Java語(yǔ)言的關(guān)鍵字,用在變量的聲明中表示這個(gè)變量是被同時(shí)運(yùn)行的幾個(gè)線程異步修改的。
while
Java語(yǔ)言的一個(gè)關(guān)鍵字,用來(lái)定義一段反復(fù)執(zhí)行的循環(huán)語(yǔ)句。循環(huán)的退出條件是while語(yǔ)句的一部分。
關(guān)于break和continue。
continue語(yǔ)句與break語(yǔ)句相關(guān),但較少用到。continue語(yǔ)句用于使其所在的for、while或do-while語(yǔ)句開(kāi)始下一次循環(huán)。在while與do-while語(yǔ)句中,continue語(yǔ)句的執(zhí)行意味著立即執(zhí)行測(cè)試部分;在for循環(huán)語(yǔ)句中,continue語(yǔ)句的執(zhí)行則意味著使控制傳遞到增量部分。
Java沒(méi)有關(guān)鍵字default,如果class定義前什么也不寫(xiě)就是默認(rèn)型,說(shuō)明訪問(wèn)他的范圍是包內(nèi)
我最近正在學(xué)編譯原理,我有c語(yǔ)言實(shí)現(xiàn)的詞法分析程序,不知可不可以,識(shí)別的是TEST語(yǔ)言的單詞。
#includestdio.h
#includectype.h
#includestring.h
#define keywordSum 8
char * keyword[keywordSum] = {"do", "else", "for", "if", "int", "read", "while", "write"};
char singleword[50] = "+-*(){};,:";
char doubleword[10] = "=!|";
char Scanin[300], Scanout[300];
FILE * fin, * fout;
int binaryFind(int low, int high, char * c1, char ** c2) {
int mid;
if(low high) return -1;
mid = (low+high)/2;
if(strcmp(c1, c2[mid]) == 0) return mid;
else if(strcmp(c1, c2[mid]) 0) return binaryFind(mid+1, high, c1, c2);
else return binaryFind(low, mid-1, c1, c2);
}
int TESTscan() {
char ch, token[40];
int es = 0, j, n;
printf("請(qǐng)輸入源文件名(包括路徑):");
scanf("%s", Scanin);
printf("請(qǐng)輸入詞法分析輸出文件名(包括路徑):");
scanf("%s", Scanout);
if((fin=fopen(Scanin, "r")) == NULL) {
printf("\n打開(kāi)詞法分析輸入文件出錯(cuò)!\n");
return 1;
}
if((fout=fopen(Scanout, "w")) == NULL) {
printf("\n創(chuàng)建詞法分析輸出文件出錯(cuò)!\n");
return 2;
}
// printf("%c", getc(fin));
ch = getc(fin);
while(ch != EOF) {
while(ch==' ' || ch=='\n' || ch=='\t') {
ch = getc(fin);
}
if(isalpha(ch)) { //標(biāo)識(shí)符
token[0] = ch;
j = 1;
ch = getc(fin);
while(isalnum(ch)) { //判斷當(dāng)前字符是否是字母或數(shù)字
token[j++] = ch;
ch = getc(fin);
}
token[j] = '\0';
// printf("%s", token);
n = binaryFind(0, keywordSum-1, token, keyword);
if(n 0 ) {
fprintf(fout, "%s\t%s\n", "ID", token);
} else {
fprintf(fout, "%s\t%s\n", token, token);
}
} else if(isdigit(ch)) { //數(shù)字
token[0] = ch;
j = 1;
ch = getc(fin);
while(isdigit(ch)) {
token[j++] = ch;
ch = getc(fin);
}
token[j] = '\0';
fprintf(fout, "%s\t%s\n", "NUM", token);
} else if(strchr(singleword, ch) 0) { //singleword
token[0] = ch;
token[1] = '\0';
ch = getc(fin);
fprintf(fout, "%s\t%s\n", token, token);
} else if(strchr(doubleword, ch) 0) { //doubleword
token[0] = ch;
ch = getc(fin);
if(ch=='=' (token[0]==''||token[0]=='' || token[0] == '!')) {
token[1] = ch;
token[2] = '\0';
ch = getc(fin);
} else if((ch=='')||(ch=='|')||(ch=='=') ch==token[0]) {
token[1] = ch;
token[2] = '\0';
ch = getc(fin);
} else {
token[1] = '\0';
}
fprintf(fout, "%s\t%s\n", token, token);
} else if(ch == '/') { //注釋
ch = getc(fin);
if(ch == '*') {
char ch1;
ch1 = getc(fin);
do {
ch = ch1;
ch1 = getc(fin);
} while((ch!='*'||ch1!='/') ch1!=EOF);
ch = getc(fin);
} else {
token[0] = '/';
token[1] = '\0';
fprintf(fout, "%s\t%s\n", token, token);
}
} else {
token[0] = ch;
token[1] = '\0';
ch = getc(fin);
es = 3;
fprintf(fout, "%s\t%s\n", "ERROR", token);
}
}
fclose(fin);
fclose(fout);
return es;
}
void main() {
int es = 0;
es = TESTscan();
if(es 0) {
printf("詞法分析有錯(cuò), 編譯停止!\n");
} else {
printf("詞法分析成功!\n");
}
}
編譯器把一種語(yǔ)言規(guī)范轉(zhuǎn)化為另一種語(yǔ)言規(guī)范的這個(gè)過(guò)程需要哪些步驟?回答這個(gè)問(wèn)題需要參照《編譯原理》,總結(jié)過(guò)程如下:
1)詞法分析:讀取源代碼,一個(gè)字節(jié)一個(gè)字節(jié)的讀進(jìn)來(lái),找出這些詞法中我們定義的語(yǔ)言關(guān)鍵詞如:if、else、while等,識(shí)別哪些if是合法的哪些是不合法的。這個(gè)步驟就是詞法分析過(guò)程。
詞法分析的結(jié)果:就是從源代碼中找出了一些規(guī)范化的token流,就像人類語(yǔ)言中,給你一句話你要分辨出哪些是一個(gè)詞語(yǔ),哪些是標(biāo)點(diǎn)符號(hào),哪些是動(dòng)詞,哪些是名詞。
2)語(yǔ)法分析:就是對(duì)詞法分析中得到的token流進(jìn)行語(yǔ)法分析,這一步就是檢查這些關(guān)鍵詞組合在一起是不是符合Java語(yǔ)言規(guī)范。如if的后面是不是緊跟著一個(gè)布爾型判斷表達(dá)式。
語(yǔ)法分析的結(jié)果:就是形成一個(gè)符合Java語(yǔ)言規(guī)定的抽象語(yǔ)法樹(shù),抽象語(yǔ)法樹(shù)是一個(gè)結(jié)構(gòu)化的語(yǔ)法表達(dá)形式,它的作用是把語(yǔ)言的主要詞法用一個(gè)結(jié)構(gòu)化的形式組織在一起。這棵語(yǔ)法樹(shù)可以被后面按照新的規(guī)則再重新組織。
3)語(yǔ)義分析:語(yǔ)法分析完成之后也就不存在語(yǔ)法問(wèn)題了,語(yǔ)義分析的主要工作就是把一些難懂的,復(fù)雜的語(yǔ)法轉(zhuǎn)化成更簡(jiǎn)單的語(yǔ)法。就如難懂的文言文轉(zhuǎn)化為大家都懂的百話文,或者是注釋一下一些不懂的成語(yǔ)。
語(yǔ)義分析結(jié)果:就是將復(fù)雜的語(yǔ)法轉(zhuǎn)化為簡(jiǎn)單的語(yǔ)法,對(duì)應(yīng)到Java就是將foreach轉(zhuǎn)化為for循環(huán),還有一些注釋等。最后生成一棵抽象的語(yǔ)法樹(shù),這棵語(yǔ)法樹(shù)也就更接近目標(biāo)語(yǔ)言的語(yǔ)法規(guī)則。
4)字節(jié)碼生成:將會(huì)根據(jù)經(jīng)過(guò)注釋的抽象語(yǔ)法樹(shù)生成字節(jié)碼,也就是將一個(gè)數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為另外一個(gè)數(shù)據(jù)結(jié)構(gòu)。就像將所有的中文詞語(yǔ)翻譯成英文單詞后按照英文語(yǔ)法組裝文英文語(yǔ)句。代碼生成器的結(jié)果就是生成符合java虛擬機(jī)規(guī)范的字節(jié)碼。
標(biāo)題名稱:java詞法分析完整代碼 詞法分析 代碼
文章轉(zhuǎn)載:http://muchs.cn/article14/ddiepge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、定制開(kāi)發(fā)、搜索引擎優(yōu)化、外貿(mào)建站、網(wǎng)站維護(hù)、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容