资源简介
自己写的编译原理的实验 语义分析 生成四元式(只实现了+、*、( )) 如果需要配套的实验报告可以在我上传的资源中找
代码片段和文件信息
/*
* 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个文件信息
相关资源
- 燕山大学软件工程编译原理实验报告
- 词法分析器语言源代码
- 一个简单的媒体播放器的设计与实现
- Linux0.0.1 源代码 代中文注释
- ADF4106源代码
- hit编译原理·词法分析
- 编译原理中采用递归下降子程序方法
- 编译原理词法、语法、语义分析实验
- 图书管理系统源代码(自己写的
- 编译原理实验五:有穷自动机的确定
- 《编译原理课程设计》-布尔表达式的
- 编译原理语义分析编译原理语义分析
- mp3解码的源代码
- 北京工业大学编译原理实验
- 8通道数据采集的Labview源代码,PC端代
- 华科计算机2015编译原理试卷及答案
- 编译原理语法分析中的算符优先编译
- 编译原理LL(1)分析法
- 编译原理实验报告及源码,LR1 活前缀
- 小波变换dwt源代码
- 现代信号谱分析源代码
- 布尔表达式的语法分析及语义分析程
- 编译原理 算符优先文法 实验报告 代
- 编译原理__语义分析_实验报告
- 语义分析代码
- 编译原理大作业 源码
- 编译原理pl\\0词法分析程序
- 语义分析之中文关键词提取
- 电子闹钟《微机接口与汇编语言》源
- 编译原理实验2-LL1分析法实现
评论
共有 条评论