资源简介
扫描器和中间代码生成器的实现,大作业是论文
ps:软工lhj的编译方法,认真做都90+,最后总评97,想拿高分第二个实验要找她答辩
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
//关键词表
vector keywords = {
“program“ “begin“ “end“ “var“ “while“ “do“
“repeat“ “until“ “for“ “to“ “if“ “then“
“else“ “;“ “:“ “(“ “)“ ““
“:=“ “+“ “-“ “*“ “/“ “>“
“>=“ “==“ “<“ “<=“
};
//代表转换图中边的值的种类
enum Type
{
other //其他字符
digit //数字“0123456789“
point //小数点“.“
exponent //指数符号“E“或“e“
letter //字母“abcdefghijklmnopqrstuvwxyz“
delimeter //界符“;:()+-*/=><“
p_or_n //正负号
};
const string delimeter_str = “;:()+-*/=><“;
//当前字符的类型
Type type;
//hash函数
struct pair_hash_func
{
template
std::size_t operator() (const std::pair &p) const
{
auto h1 = std::hash{}(p.first);
auto h2 = std::hash{}(p.second);
return h1 ^ h2;
}
};
//状态变换表表示sigma(intType) = int任何非法的变换都会到达状态0
unordered_map int pair_hash_func> aut =
{
{{1digit}2} {{1letter}8} {{1delimeter}9} {{1other}15}
{{2digit}2} {{2point}3} {{2exponent}5} {{2p_or_n}11} {{2other}11}
{{3digit}4}
{{4digit}4} {{4exponent}5} {{4p_or_n}11}{{4other}11}
{{5digit}7} {{5p_or_n}6}
{{6digit}7}
{{7digit}7} {{7p_or_n}11} {{7other}11}
{{8digit}8} {{8letter}8} {{8other}12}
{{9delimeter}10}{{9other}14}
{{10other}13}
};
vector identifiers; //标识符表
vector constants; //常数表
//token
struct Token
{
int _code;
int _value;
Token() = default;
Token(int c int v) :_code(c) _value(v) {}
~Token() = default;
};
vector token_seq; //token序列
string curr_token; //当前单词
int n p m e t; //尾数值,指数值,小数位数,指数符号,类型
double constant; //常数值
string buffer; //源程序缓冲区
int i; //源程序缓冲区指针,当前字符为buffer[i]
void act(int); //状态为state时的操作
int find(int char); //state接受value后的下一个状态
int insert_constant(double); //插入常数constant到常数表,返回constant在常数表的位置
int reserve(const string &); //返回界符在keywords中的位置
int insert_identifier(string &); //插入标识符identifier到符号表,返回identifier在符号表的位置
Type transform(char);
int main(int argc char *argv[]) {
//参数不足
if (argc != 2) {
cout << “Missing enough arguments at least 1: “ << endl;
exit(1);
}
string fileName = argv[1];
ifstream in(fileName ios::in);
if (in.fail()) {
cout << “fail in opening “ << fileName << “ !“ << endl;
exit(2);
}
int curr_state; //当前状态
//从文件流in中读取一行保存到字符串buffer中
while (getline(in buffer)) {
i = 0; //从buffer的第一个字符开始
do {
while (buffer[i] == ‘ ‘) { //过滤空格
i++;
}
//判定一个单词首字符的类别
//字母
if (buffer[i] >= ‘a‘ && buffer[i] <= ‘z‘) {
type = letter;
}
//数字
else if (buffer[i] >= ‘0‘ && buffer[i] <= ‘9‘) {
type = digit;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\
目录 0 2020-10-20 21:45 编译方法实验源代码+实验报告+大作业\大作业\
文件 287980 2020-10-20 21:42 编译方法实验源代码+实验报告+大作业\大作业\大作业.docx
目录 0 2020-10-20 21:45 编译方法实验源代码+实验报告+大作业\实验报告\
文件 2604994 2020-10-20 21:43 编译方法实验源代码+实验报告+大作业\实验报告\实验报告.docx
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\源代码\
文件 71 2020-04-18 23:02 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\源代码\exa.txt
文件 35 2020-04-18 23:04 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\源代码\exa2.txt
文件 8756 2020-04-19 10:35 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\源代码\experiment1.cpp
文件 44544 2020-04-18 22:43 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\源代码\experiment1.exe
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\异常处理\
文件 40713 2020-04-18 22:49 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\异常处理\参数缺失.jpg
文件 39419 2020-04-18 22:51 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\异常处理\文件不存在.jpg
文件 66112 2020-04-18 22:59 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\异常处理\词法错误.jpg
文件 74372 2020-04-18 23:00 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\异常处理\非法字符.jpg
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\正常结果\
文件 66930 2020-04-18 23:09 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\正常结果\合法输出1.jpg
文件 54020 2020-04-18 23:04 编译方法实验源代码+实验报告+大作业\实验源代码\实验1\运行结果\正常结果\合法输出2.jpg
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\
文件 615 2020-04-17 00:12 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\README.md
文件 1270269 2020-04-17 09:15 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\实验概览.png
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\源代码\
文件 325632 2020-04-17 00:05 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\源代码\experiment2.exe
文件 56 2020-04-16 23:05 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\源代码\grammer.txt
文件 70 2020-04-16 10:38 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\源代码\grammer2.txt
文件 16372 2020-04-17 00:10 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\源代码\main.cpp
文件 833 2020-04-17 00:10 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\源代码\util.h
目录 0 2020-07-29 11:42 编译方法实验源代码+实验报告+大作业\实验源代码\实验2\运行结果\
............此处省略15个文件信息
相关资源
- 东北大学软件学院数值分析历年试题
- 东北大学软件工程历年真题
- AVR多功能实验箱DS1302时钟实验源码资
- 东北大学马克思主义基本原理概论参
- 东北大学软件体系结构与设计模式四
- 广东工业大学操作系统实验源码
- RFPA模拟软件
- 东北大学软件学院信息安全程序实践
- 华中科技大学计算机学院计算机组成
- 东北大学计算机学院软件工程实验
- 东北大学数据库原理实验报告
- 东北大学操作系统期末复习准备
- 计算机图形学 OpenGL实验源码+实验文档
- 数字处理中 图像融合实验源图片
- 东北大学软件工程期末复习题ssd9
- 编译原理课件及实验源代码实验报告
- pthreads-w32-2-8-0-release.exe及编译方法
- 东北大学人工智能课件
- 东北大学离散数学试卷含答案
- 算法分析与设计东北大学
- 东北大学操作系统全套课件
- 东北大学软件工程复习题
- 山东大学软件学院 非关系型数据库实
- 河南大学计算机网络综合实验源码加
- 东北大学操作系统复习题
- 东北大学数据库期末考试题
- 东北大学数据库实验
- 使用TPU对104种花朵进行分类-东北大学
- 东北大学软件工程导论期末复习
- Linux实验报告33701
评论
共有 条评论