资源简介
自己写的编译原理的实验 语义分析 生成四元式(只实现了+、*、( )) 如果需要配套的实验报告可以在我上传的资源中找
代码片段和文件信息
/*
* To change this template choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Administrator
*/
public class Lexicon {
private char[] code;// 存储字符串
private String[] keywords = {“if“ “else“ “for“ “while“ “do“ “return“ “int“ “double“ “float“ “char“ “string“ “true“ “false“};//关键字
private char[] operator1 = {‘=‘ ‘+‘ ‘-‘ ‘*‘ ‘/‘ ‘<‘ ‘>‘ ‘=‘ ‘‘ ‘{‘ ‘}‘ ‘(‘ ‘)‘};
private String[] operator2 = {“!=“ “>=“ “<=“ “==“};
private char[] escaped = {‘\‘‘ ‘\“‘ ‘\\‘ ‘b‘ ‘t‘ ‘n‘ ‘f‘ ‘r‘ ‘0‘};//转义字符
SymbolTable table = new SymbolTable();// 符号表
private String errorInfo = ““;//错误信息
public Lexicon(char[] code) {
this.code = code;
analysis();
}
// 分析字符串
public boolean analysis() {
int i = 0;
while (i < code.length) {
if (code[i] == ‘ ‘ || code[i] == ‘\n‘) {
i++;
continue;
}
if((i+1 while(code[i] != ‘\n‘) {
i++;
}
System.out.println(“注释被忽略“);
continue;
}
if(code[i] == ‘;‘) {
table.addSymbol(“tail“ “;“);
}
if (isDigit(code[i])) {// 判断数字
String num = ““;
boolean isDecimal = false;
boolean error = false;
while (isDigit(code[i])) {
num += code[i];
i++;
while(isLetter(code[i])) {//如果是以数字开头的标识符,则出错
error = true;
num += code[i];
i++;
}
if(code[i] == ‘.‘) {
num += ‘.‘;
i++;
if(!isDigit(code[i])) {
errorInfo += num + “附近出现错误,小数点后应该有数字\n“;
return false;
}
isDecimal = true;
}
}
if(error) {
errorInfo += num + “附近出现错误,标识符不能以数字开头\n“;
return false;
}
else if(isDecimal) {
table.addSymbol(“decimal“ num);
}
else {
table.addSymbol(“integer“ num);
}
continue;
}
if(isLetter(code[i])) {//判断标识符
String identifier = ““ + code[i];
i++;
while(isLetter(code[i]) || isDigit(code[i])) {
identifier += code[i];
i++;
}
if(!isKeyword(identifier)) {
table.addSymbol(“identifier“ identifier);
}
else {
table.addSymbol(“keyword“ identifier);
}
continue;
}
if(i+1 int checkOperator = checkOperator(code[i] code[i+1]);
if(checkOperator == 2) {
table.addSymbol(“operator“ ““+code[i]+code[i+1]);
i += 2;
continue;
}
if(checkOperator == 1) {
table.addSymbol(“operator“ ““+code[i]);
i++;
continue;
}
}
if(code[i] == ‘\‘‘) {//判断字符常数
if(i+2 < code.length) {
if(code[i+1] == ‘\\‘) {
if(i+3 < code.length) {
if(isEscaped(code[i+2]) && code[i+3] == ‘\‘‘) {
table.addSymbol(“character“ ““+code[i+1]+code[i+2]);
i += 4;
continue;
}
else {
errorInfo += ““ + code[i] + code[i+1] + code[i+2] + “附近有错误,字符未闭合或使用了不正确的转义字符\n“;
return
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-12-15 17:23 lab3\
文件 232 2012-11-25 14:43 lab3\.classpath
文件 379 2012-11-27 19:47 lab3\.project
目录 0 2012-12-18 10:31 lab3\bin\
文件 801 2012-12-18 10:31 lab3\bin\ActionDetail.class
文件 5184 2012-12-18 10:31 lab3\bin\Lexicon.class
文件 5610 2012-11-25 14:43 lab3\bin\Lexiconfr
文件 5390 2012-12-18 10:31 lab3\bin\Parsing.class
文件 711 2012-12-18 10:31 lab3\bin\Parsingfr
文件 711 2012-12-18 10:31 lab3\bin\Parsingfr
文件 522 2012-12-18 10:31 lab3\bin\Parsingfr
文件 8125 2012-12-18 10:31 lab3\bin\Parsingfr
文件 2800 2012-12-18 10:31 lab3\bin\ParsingSem.class
文件 1451 2012-12-18 10:31 lab3\bin\ParsingSeq.class
文件 342 2012-12-18 10:31 lab3\bin\Quadruple.class
文件 1782 2012-12-18 10:31 lab3\bin\SymbolTable.class
文件 3710 2012-11-25 14:32 lab3\build.xm
文件 85 2012-11-25 14:32 lab3\manifest.mf
目录 0 2012-12-15 17:23 lab3\nbproject\
文件 78019 2012-11-25 14:32 lab3\nbproject\build-impl.xm
文件 475 2012-11-25 14:32 lab3\nbproject\genfiles.properties
目录 0 2012-12-15 17:23 lab3\nbproject\private\
文件 139 2012-11-25 14:32 lab3\nbproject\private\private.properties
文件 230 2012-11-25 14:43 lab3\nbproject\private\private.xm
文件 2315 2012-11-25 14:32 lab3\nbproject\project.properties
文件 513 2012-11-25 14:32 lab3\nbproject\project.xm
目录 0 2012-12-15 18:35 lab3\src\
文件 5524 2012-12-02 14:26 lab3\src\Lexicon.java
文件 5610 2012-11-25 14:43 lab3\src\Lexiconfr
文件 6607 2012-12-15 19:26 lab3\src\Parsing.java
文件 8940 2012-12-16 15:32 lab3\src\Parsingfr
............此处省略3个文件信息
相关资源
- pppd2.4.7源代码以及拨号脚本
- 酒店预订管理系统源代码
- 机会路由源代码+仿真工具(SCORP)
- 批量替换证件照片的底色(含源代码
- cocos2d-x飞机大战项目
- 编译原理实验:词法分析,语法分析
- 分享一个远程控制软件源代码
- 吉林大学编译原理课件
- BLE-CC254x-1.3.2 蓝牙官方源代码
- 程序源代码行数统计工具
- flutter_gallery源代码
- 插件式GIS应用框架的设计与实现&mda
- x264源代码
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 游戏物理引擎开发&源代码.zip
- 易语言变量和数组的编译原理
- 易语言征途登陆器源代码源码
- VC++ RS232 RS485串口通信源代码_
- 烟花效果源代码
- 易语言P2P源代码1源码易语言P2P网络电
- ABB机器人教学仿真源代码_搬运应用
- Google OCR API源代码和神经网络识别OC
- 写字板程序具有完整源代码以及清晰
- 编译原理语法分析器、词法分析器
- 基于K60的线性CCD摄像头的自主循迹平
- [b115]FPGA上运行人脸识别源代码.zip
- 机器学习实战高清pdf,中文版+英文版
- 山东大学编译原理PL/0语言 compiler实验
- 祖玛游戏源代码快下吧快快
评论
共有 条评论