资源简介
自己写的编译原理的实验 语义分析 生成四元式(只实现了+、*、( )) 如果需要配套的实验报告可以在我上传的资源中找

代码片段和文件信息
/*
* 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个文件信息
相关资源
- bp神经网络源代码,可直接运行
- 仿知乎界面小程序源代码
- 贪吃蛇源代码.fla
- 编译原理实验工具及参考源码(lex&
- dotnet 写字板 实验 源代码 不好请要不
- 类pascal语言编译器(编译原理实验)
- 图像二维小波变换的实现源代码
- 八三编码器设计 VHDL代码 简单,包附
- linux应用层的华容道游戏源代码
- 网上拍卖系统完整源代码
- CSMA/CD等动画演示加源代码
- silicon lab公司的收音IC SI47XX全套开发工
- 合同管理系统的源代码(附数据库)
- 用VC 编写的仿QQ聊天室程序源代码
- STM32F103 串口程序(完整版)
- VPC3_DPV1源代码,Profibus
- PB做的托盘程序(最小化后在左下角显
- 编译原理课程设计:词法语法编译器
- 透明加密源码及说明
- 排队机叫号 源代码
- 五子棋C 源代码
- CAD LISP24个源代码
- 中科院 编译原理 习题及解答
- 二叉树基本操作源代码
- 推箱子及人工智能寻路C 源代码
- 编译原理四元式和逆波兰式
- opengl轮廓字体源代码
- 冈萨雷斯 数字图像处理 源代码(m文
- 直流伺服电机电路原理图(内附单片
- 哈哈冒险岛登入器源代码
评论
共有 条评论