词法分析器源代码java 词法分析器程序流程图( 四 )


transient
Java语言的关键字,用来表示一个域不是该对象串行化的一部分 。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的 。
try
Java语言的关键字,用来定义一个可能抛出异常语句块 。如果一个异常被抛出 , 一个可选的catch语句块会处理try语句块中抛出的异常 。同时,一个finally语句块会被执行,无论一个异常是否被抛出 。
void
Java语言的关键字,用在Java语言的方法声明中说明这个方法没有任何返回值 。"void"也可以用来表示一句没有任何功能的语句 。
volatile
Java语言的关键字,用在变量的声明中表示这个变量是被同时运行的几个线程异步修改的 。
while
Java语言的一个关键字,用来定义一段反复执行的循环语句 。循环的退出条件是while语句的一部分 。
关于break和continue 。
continue语句与break语句相关,但较少用到 。continue语句用于使其所在的for、while或do-while语句开始下一次循环 。在while与do-while语句中,continue语句的执行意味着立即执行测试部分;在for循环语句中,continue语句的执行则意味着使控制传递到增量部分 。
Java没有关键字default,如果class定义前什么也不写就是默认型,说明访问他的范围是包内
请用JAVA编程输入一个语句进行词法分析我最近正在学编译原理,我有c语言实现的词法分析程序 , 不知可不可以 , 识别的是TEST语言的单词 。
#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(lowhigh) 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("请输入源文件名(包括路径):");
scanf("%s", Scanin);
printf("请输入词法分析输出文件名(包括路径):");
scanf("%s", Scanout);
if((fin=fopen(Scanin, "r")) == NULL) {
printf("\n打开词法分析输入文件出错!\n");
return 1;
}
if((fout=fopen(Scanout, "w")) == NULL) {
printf("\n创建词法分析输出文件出错!\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)) { //标识符
token[0] = ch;
j = 1;
ch = getc(fin);
while(isalnum(ch)) { //判断当前字符是否是字母或数字
token[j++] = ch;
ch = getc(fin);
}
token[j] = '\0';
// printf("%s", token);
n = binaryFind(0, keywordSum-1, token, keyword);
if(n0 ) {
fprintf(fout, "%s\t%s\n", "ID", token);
} else {
fprintf(fout, "%s\t%s\n", token, token);
}
} else if(isdigit(ch)) { //数字
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);

推荐阅读