没有合适的资源?快使用搜索试试~ 我知道了~
编译原理课程设计报告1
需积分: 0 0 下载量 198 浏览量
2022-08-04
11:28:38
上传
评论
收藏 1.56MB PDF 举报
温馨提示
试读
40页
1.词法及文法描述文件的解析 2.正规表达式中缀转后缀算法实现 3.生成 NFA 以及确定化 NFA 算法实现 4.最小化 DFA 的算法实现 5.词法与文法分
资源详情
资源评论
资源推荐
编译原理课程设计
设计报告
组长:09014222 王铎
成员:09014105 杨阳
09014116 曹心成
09014119 郑锜
东南大学计算机科学与工程学院
二 0 17 年 5 月
设计任务名称
SeuLex/SeuYACC
完成时间
2017/5/30
验收时间
2017/6/3
本组成员情况
学 号
姓 名
承 担 的 任 务
成 绩
09014222
王铎
1.词法及文法描述文件的解析
2.正规表达式中缀转后缀算法实现
3.生成 NFA 以及确定化 NFA 算法实现
4.最小化 DFA 的算法实现
5.词法与文法分析程序的生成
6.基于 CFG 的 LR(1)下推自动机以及分析表的生成
7.LR(1)到 LALR(1)的映射
8.语法制导翻译的函数实现
9.基本块划分、寄存器分配算法的实现
10.目标代码生成算法的实现
11.设计报告中中间代码与目标代码部分的说明
09014105
杨阳
1.词法输入文件的解析及输出格式的调整
2.设计报告中 SeuLex 部分数据结构和算法的说明
09014116
曹心成
1.词法用户定义部分的解析和输出
2.设计报告中模块概要设计的说明
09014119
郑锜
1.语法制导翻译的初步分析
2.设计报告中 SeuYacc 部分数据结构和算法的说明
注:本设计报告中各部分如果页数不够,请自行扩页。原则是一定要把报告写
详细,能说明本组设计的成果和特色,能够反映小组中每个人的工作。报告中
应该叙述设计中的每个模块。设计报告将是评定各人成绩的重要依据之一。
1 编译对象与编译功能
1.1 编译对象
(作为编译对象的 C 语言子集的词法、语法描述)
1.1.1 C 语言子集的词法描述
%{
#include <string>
#include <map>
#include <iostream>
int line = 0;
int numCount = 0;
%}
digit [0~9];
letter [A~Za~z];
id {letter}({letter}|{digit})*;
number {digit}+(.{digit}+)?(E[+-]?{digit}+)?;
%%
int {return "int";}
float {return "float";}
double {return "double";}
void {return "void";}
if {return "if";}
else {return "else";}
while {return "while";}
return {return "return";}
static {return "static";}
{id} {return "id";}
{number} {++numCount; return "num";}
"+" {return "+";}
"-" {return "-";}
"*" {return "*";}
"/" {return "/";}
"%" {return "%";}
"+=" {return "+=";}
"-=" {return "-=";}
"*=" {return "*=";}
"/=" {return "/=";}
"%=" {return "%=";}
"&&" {return "&&";}
"||" {return "||";}
"!" {return "!";}
"<=" {return "<=";}
">=" {return ">=";}
"=" {return "=";}
"!=" {return "!=";}
"==" {return "==";}
"<" {return "<";}
">" {return ">";}
"(" {return "(";}
")" {return ")";}
"{" {return "{";}
"}" {return "}";}
"[" {return "[";}
"]" {return "]";}
";" {++line;return ";";}
"," {return ",";}
%%
void calLine() {
std::cout << "number of semicolon : " << line << std::endl;
}
void getNumCount() {
std::cout << "count of num : " << numCount << std::endl;
}
void main() {
calLine();
getNumCount();
}
1.1.2 C 语言子集的语法描述
%right '=' '+=' '-=' '*=' '/='
%left '==' '!='
%left '<' '>' '<=' '>='
%left '+' '-'
%left '*' '/'
%left '||'
%left '&&'
%right '!'
%left 'else'
%%
S : program {}
;
program : globalData stmts {}
| stmts {}
;
globalData : globalStmts {
}
;
globalStmts : globalStmts globalStmt {}
| globalStmt {}
;
globalStmt : 'static' var_decl ';' {}
;
stmts : stmts M stmt {
backpatch($1.nextlist, $2.instr);
$$.nextlist = $3.nextlist;
}
| stmt {
$$.nextlist = $1.nextlist;
}
;
stmt : '{' stmts '}' {
$$.nextlist = $2.nextlist;
}
| fun_define {
returnToGlobalTable();
}
| if_stmt {
$$.nextlist = $1.nextlist;
}
| while_stmt {
$$.nextlist = $1.nextlist;
}
| var_decl ';' {
$$.nextlist = $1.nextlist;
}
| expr_stmt ';' {
}
| 'return' expr ';' {
emit("return",$2.place,"","");
setOutLiveVar($2.place);
}
;
fun_define : fun_decl_head BlockLeader '{' stmts '}' {
$$.name = $1.name;
}
;
剩余39页未读,继续阅读
郑瑜伊
- 粉丝: 19
- 资源: 318
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0