资源简介
哈工大 编译原理 词法分析 语法分析 语义分析
代码片段和文件信息
/*
词法分析程序的功能
输入是源程序字符串以‘#’ 结束。
输出是单词符号的二元组( 单词种别码 单词自身字符串 ) 即( syn单词的种别 token单词自身字符串或sum整型常数单词)
例如
输入: x:=9; if x>0 then x:=2*x+1/3 fi #(可以文件方式读入)
输出: (可以写入文件)
(29 x )
(18 := )
(30 9 )
(26 ; )
(2 if )
(29 x )
*/
//package 词法分析;
import java.io.*;
import java.util.*;
class CiFaDisegn{
//声明处理字符的类型
final int NONE=0;
final int DELIMITER=1; //操作符运算符
final int VAR=2; //字符变量
final int Num=3; //数字
final int COMMAND=4; //关键字
//final int QUOTEDSTR=5; //带引号的字符串
//程序终结符end of program
final String EOP=“#“;
//声明关键字
final int unKnowKeyword=0;
final int FI=1;
final int IF=2;
final int THEN=3;
final int WHILE=4;
final int DO=5;
final int END=6;
final int ELSE=7;
final int TO=8;
final int READ=9;
final int WRITE=10;
final int EOL=11;
private char[] prog;
private int progIdx;
private String token;
private int tokType;
private int kwToken;
final int PROG_SIZE=100000;
class Keyword{
String keyword;
int keywordindex;
Keyword(String strint t){
keyword=str;
keywordindex=t;
}
}
//将关键字的外部表示和内部表示保存在一个名为KwTable的表中
Keyword kwTable[]={
new Keyword(“fi“FI)
new Keyword(“if“IF)
new Keyword(“then“THEN)
new Keyword(“while“WHILE)
new Keyword(“do“DO)
new Keyword(“end“END)
new Keyword(“else“ELSE)
new Keyword(“to“TO)
new Keyword(“read“READ)
new Keyword(“write“WRITE)
};
//CiFaDisegn的构造函数
public CiFaDisegn(String programName) throws IOException{
char tempbuf[]=new char[PROG_SIZE];
int size;
size=loadProgram(tempbufprogramName);
if(size!=-1){
prog=new char[size];
System.arraycopy(tempbuf 0 prog 0 size);
}
}
//读入一个需要分析的程序
private int loadProgram(char[] pString fname)
throws IOException{
int size=0;
try{
FileReader fr=new FileReader(fname);
BufferedReader br=new BufferedReader(fr);
size=br.read(p 0 PROG_SIZE);
fr.close();
}catch(FileNotFoundException exc){
System.out.print(“没有找到该文件!“);
}
if(p[size-1]==(char)31)size--;
return size;
}
//分析程序代码
private void getToken() throws IOException
{
char ch;
tokType = NONE;
token = ““;
kwToken = unKnowKeyword;
if(progIdx == prog.length) {
token = EOP;
return ;
}
// 跳过空格符
while(progIdx < prog.length &&
isSpaceOrTab(prog[progIdx])) progIdx++;
//handle crlf
if(prog[progIdx] == ‘\r‘) {
progIdx += 2;
kwToken = EOL;
token = “\r\n“;
return;
}
// 扫描完所有的字符end program
if(progIdx == prog.length) {
if(progIdx == prog.length) {
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 451 2006-10-17 13:08 COMP\词法分析\CiFaDisegn$Keyword.class
文件 5450 2006-10-17 13:08 COMP\词法分析\CiFaDisegn.class
文件 7326 2006-10-17 13:08 COMP\词法分析\CiFaDisegn.java
文件 615 2006-10-17 13:08 COMP\词法分析\CiFatest.class
文件 421 2006-10-14 09:42 COMP\词法分析\CiFatest.java
文件 116 2006-10-14 09:46 COMP\词法分析\test.txt
文件 242 2009-04-19 22:33 COMP\词法分析\readMe.txt
文件 100864 2009-04-19 22:32 COMP\词法分析文档.doc
目录 0 2009-04-19 22:33 COMP\词法分析
目录 0 2009-04-19 22:33 COMP
----------- --------- ---------- ----- ----
115485 10
- 上一篇:SPH 流体动画源代码
- 下一篇:基于51单片机PID算法的直流电机测速控速设计
相关资源
- 两周自制脚本语言_PDF电子书 带书签目
- 编译原理及编译程序构造第二版东南
- 燕山大学编译原理实验报告.doc
- 编译原理课设 词法分析、语法分析、
- 安大编译原理试卷
- 编译原理语法分析、词法分析源代码
- 编译原理---课程实验
- 编译原理,词法分析,语法分析,四
- LL(1)文法分析器
- 哈尔滨工业大学算法分析与设计答案
- 算符优先分析程序
- 编译原理实验 语法分析 递归下降分析
- SAMPLE语言的词法分析器
- 编译原理课程设计LL(1)分析过程模
- 哈工大软件工程试卷+答案
- 编译原理语义分析实验源代码
- 燕山大学软件工程编译原理实验报告
- 词法分析器语言源代码
- hit编译原理·词法分析
- 编译原理中采用递归下降子程序方法
- 编译原理词法、语法、语义分析实验
- 编译原理实验五:有穷自动机的确定
- 《编译原理课程设计》-布尔表达式的
- 编译原理语义分析编译原理语义分析
- 北京工业大学编译原理实验
- 华科计算机2015编译原理试卷及答案
- 编译原理语法分析中的算符优先编译
- 编译原理LL(1)分析法
- 编译原理实验报告及源码,LR1 活前缀
- 编译原理 算符优先文法 实验报告 代
评论
共有 条评论