# 编程语言原理与编译课程设计
## 一、背景
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。因此本课程大作业就是使用F#语言来实现一个micro C语言。
## 二、目的与目标
1.编译(编译并在内存中运行、编译保存并执行、编译保存执行并在控制台输出结果、检测语法错误)
2.语法(SWITCH CASE判断结构、FOR循环结构、DO WHILE循环结构、?:表达式)
3.词法(八进制、十六进制、++、--、+、-、\*、/、%)
4. 语义()
5.测试(语法部分测试、词法部分测试、语义部分测试)
6.文档编写
## 三、语言教程
### 3.1**运算符**
下表显示了支持的所有算术运算符。假设变量 **A** 的值为 10,变量 **B** 的值为 20,则:
|运算符|描述|实例|
| :- | :- | :- |
|+|把两个操作数相加|A + B 将得到 30|
|-|从第一个操作数中减去第二个操作数|A - B 将得到 -10|
|\*|把两个操作数相乘|A \* B 将得到 200|
|/|分子除以分母|B / A 将得到 2|
|%|取模运算符,整除后的余数|B % A 将得到 0|
|++|自增运算符,整数值增加 1|A++ 将得到 11|
|--|自减运算符,整数值减少 1|A-- 将得到 9|
### 3.2循环
有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了更为复杂执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.003.png)
### 3.2.1while 循环
```
while(condition)
{
statement(s);
}
```
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。
当条件为 false 时,程序流将继续执行紧接着循环的下一条语句。
## 四、语言手册
### 4.1 算数运算符
Assumes that a=10 and b =20
|Operator|Description|Example|
| - | - | - |
|+|Adds two operands|A + B will give 30|
|-|Subtracts second operand from the first|A - B will give -10|
|\*|Multiply both operands|A \* B will give 200|
|/|Divide numerator by de-numerator|B / A will give 2|
|%|Modulus Operator and remainder after integer division|B % A will give 0|
|++|Increment operator increases integer value by one|A++ will give 11|
|--|Decrement operator decreases integer value by one|A-- will give 9|
### 4.2 循环
|Loop type|Description|Example|
| - | - | - |
|While循环|重复语句或语句组,直到给定的条件为真。测试前的状态执行循环体。|<p>int main(bool b) {</p><p>` `while (b)</p><p>` `break;</p><p>` `return 1;</p><p>}"</p><p></p>|
|For 循环|执行的语句序列多次和缩写管理循环变量的代码。|<p>int n;</p><p>n=8;</p><p>int a;</p><p>for(a=0; a<n; ++a)</p><p>` `print a;</p>|
## 五、架构设计
![基本流程图](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.004.png)
## 六、测试
### 6.1 测试用例
|编号|测试项|测试用例|
| - | - | - |
|1|八进制|test1.c|
|2|十六进制|test2.c|
|3|do while|test3.c|
|4|?:|test4.c|
|5|switch case|test5.c|
|6|++、--、+、-、\*、/、%、for、switch case|test6.c|
### 6.2 测试代码
test1.c
```c
void main(int n){
n = 0o1000;
print n;
println;
}
```
test2.c
```c
void main() {
n = 0x100;
print n;
println;
}
```
test3.c
```c
void main(int a){
do{
print a;
--a;
}while(a>=0)
println ;
print a;
}
```
test4.c
```c
void main(int n) {
int a;
for(a=0; a<n; ++a)
a%2==0?print a/2:print (a+2)/2;
println;
}
```
test5.c
```c
void main(int n)
{
switch (n%3)
{
case 0: print 0;
case 1: print 1;
case 2: print 2;
}
println;
}
```
test6.c
```c
int main(){
int a;
int b;
int i;
for (i = 0; i <= 6; ++i){
a = 10;
b = 6;
switch (i) {
case 0:
(a += b);
case 1:
(a -= b);
case 2:
(a *= b);
case 3:
(a /= b);
case 4:
(a %= b);
case 5:
(++a);
case 6:
(--a);
}
print a;
}
}
```
### 6.3 测试结果
|编号|输入|输出|测试结果|
| - | - | - | - |
|1|100|512|通过|
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.005.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.006.png)
|编号|输入|输出|测试结果|
| - | - | - | - |
|2|无|256|通过|
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.007.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.008.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.009.png)
|编号|输入|输出|测试结果|
| - | - | - | - |
|3|5|5 4 3 2 1 0 -1|通过|
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.010.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.011.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.012.png)
|编号|输入|输出|测试结果|
| - | - | - | - |
|4|5|0 1 1 2 2|通过|
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.013.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.014.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.006.png)
|编号|输入|输出|测试结果|
| - | - | - | - |
|5|0|0|通过|
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.015.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.016.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.017.png)
|编号|输入|输出|测试结果|
| - | - | - | - |
|6|无|16 4 60 1 4 11 9|通过|
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.018.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.019.png)
![](img/Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.020.png)
## 七、项目体会
整个学期下来,感觉这门课是很难的,是需要话很多时间是认真学习的,而且知识点从浅入深,还在循环使用,如果其中一点没弄懂,后面就需要很多来填补。刚开始拿到大作业的时候也想了很久好做什么,最后还是选择了修改mirocC。老师本来的要求是要自己做一个编译器,但是能力有限只能自己会的做上去,我们在原有的mirocC的上加上了一些语法和语义,加上去的语法例如:DOWHILE语句、SWITCH语句、等等,还加上了一些加法、减法、乘法、除法的运算。虽然不是很多,但是我们也学习了很久,只要是能够自己完成这些,从慢慢开始不懂,然后能照着先前的学习,在写出自己东西。
在整个完成设计模块、编码模块、测试模块和编写文档模块的过程中,还是觉得每节课都是认真学习,不懂的及时搞懂才是最重要的。因为前面有些地方没有弄懂,后面就有觉得很难来做,所以以后在上课的时候还是要认真的听讲最好还是要课后能复习一下,多去把不会的问题去问老师和同学,才能真的在学到东西,为以后的学习打好基础。所以,大作业也是让我们在复习前面的知识来完成,让我们更加掌握一个知识点也是在做整个项目中�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
目的与目标 1.编译(编译并在内存中运行、编译保存并执行、编译保存执行并在控制台输出结果、检测语法错误) 2.语法(SWITCH CASE判断结构、FOR循环结构、DO WHILE循环结构、?:表达式) 3.词法(八进制、十六进制、++、--、+、-、*、/、%) 4.语义() 5.测试(语法部分测试、词法部分测试、语义部分测试) 6.文档编写
资源推荐
资源详情
资源评论
收起资源包目录
100012261-基于C语言实现编译课程设计(编程语言原理).zip (50个子文件)
hmcm
LICENSE 1KB
TEST
test6.out 613B
test4.c 103B
test2.c 141B
test1.out 81B
test3.out 137B
test6.c 327B
test4.out 221B
test2.out 77B
test5.out 165B
test5.c 123B
test1.c 143B
test.out 221B
test3.c 99B
img
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.013.png 48KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.017.png 6KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.010.png 40KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.005.png 45KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.018.png 62KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.014.png 55KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.001.png 120B
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.004.png 35KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.012.png 8KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.015.png 36KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.011.png 40KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.007.png 31KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.006.png 7KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.003.png 31KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.009.png 11KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.019.png 52KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.020.png 11KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.016.png 60KB
Aspose.Words.2403307b-14cb-4abb-b5cd-a8970059e2d1.008.png 29KB
hw
Comp.fs 12KB
Parse.fs 1KB
CLex.fs 120KB
Absyn.fs 3KB
Machine.class 5KB
README.txt 629B
CPar.fsi 3KB
编译原理-小组-许佳晨、施怡昕.docx 963KB
Machine.java 7KB
ParseAndRun.fs 141B
Contcomp.fs 13KB
CPar.fs 90KB
CLex.fsl 5KB
CPar.fsy 6KB
Machine.fs 7KB
FSharp.PowerPack.dll 674KB
README.md 8KB
共 50 条
- 1
资源评论
神仙别闹
- 粉丝: 2674
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功