资源简介
哈工大 编译原理 词法分析 语法分析 语义分析

代码片段和文件信息
/*
词法分析程序的功能
输入是源程序字符串以‘#’ 结束。
输出是单词符号的二元组( 单词种别码 单词自身字符串 ) 即( 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算法的直流电机测速控速设计
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 哈工大的高等电磁学电磁场课件
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译词法分析器识别关键字常数和符
- SAMPLE (类pascal) 词法分析程序 C 版
- Delphi做的用于分析Pascal语言的词法分
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- Linux操作系统课件PPT
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 超详细课件哈工大第七版理论力学
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- 哈工大威海-嵌入式实验报告答案
- 卫星通信知识点总结不包含计算题
- 哈工大单片机教材课后答案张毅刚编
- FOR循环语句的翻译程序设计简单优先
- 哈工大深圳NLP考试参考
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
评论
共有 条评论