编译技术的作业笔记

来源:互联网 发布:网络建设 需求分析 编辑:程序博客网 时间:2024/06/03 14:07

昨天考完日语之后,就知道了要悲剧(其实没考我就知道要悲剧),无奈之,今天继续做起了课设,希望能够尽早的完成它。

因为期末很多报告,昨晚做了一下编译技术的作业,题目 1:C 标识符的识别 2:词法分析程序。。。

 

他们都说1做好了,于是乎我就做题2,其实也挺简单的,就是从.C 中分析字符,一句话就是怎么样筛选出那些输入的字符,

老师为了考虑大多数人,降低了难度。

 

课设做了两周了,用JSP做东西也开始熟练起来,现在突然用起C ,还真的有点不太习惯,不过终于感觉到了C的灵活性了。。。

想怎么写就怎么写,编译器不会束缚太多。。。

 

其实,词法分析程序,要做得完善还是挺难的(自己单独在短时间完成)。这里我有两个思路来做一部分,

使用了一种简单的方法。

 

1:比较简单的

 

我首先利用  freopen("1.txt", "r", stdin); 默认遇到 scanf 就读取文件中的内容,这里读取的是以字符串

的方式,所以,如果以我定义的规则来做词法的分析,每个不相关联的代码必须要以空格分开,不然会造成

分析出错。。

举个例子说明:

int main()

 

如果是这样,main和 ( 就不能分析出来,因为在我们的表中不可能存放这样的情况,

必须这么写 :

int main ( )

 

这样就简单了。。。

 

2:相对复杂,但是方便程序的编写,符合大家的习惯

 

其实这中方法也挺好实现的,我来说下思路。

首先同样是从文件中读取,我们可以 以行为单位来读取 ,然后分析这一行的字符串的内容。

这里的分析方法,我是将取到的每一行的字符串后,从头开始扫描,

其中会有几种结束的条件:                      

1:遇到 “;”

2:“(”和“)”

3“{”和“}”

4:不考虑字符串的情况,老师说的

5:空格

 

在对这一行的字符串的扫描时,匹配我们的表,并且记录,记录可以用结构来封装,

动态的方式便于分析相对大的程序,提高程序的灵活性;

 

现在来描述一下我理解的情况(可能有些地方不对,请高手指教

 

当我读取到每一行的内容后,又一个一个的字符开始读取,遇到上述的条件,

提取出一个字符串,然后与我们的表匹配。

这里我以一行的字符串为例子描述

大致的流程图如下:

 

 

所以,这里我们还得规定就是在程序中,每一行只能写一句程序。