CS143 assignment PA2

CS143:编译原理|PA2:正则表达式和词法分析
其实工作了这么久,自己是什么水平,心里是再清楚不过了。非科班出生,工作的前两年做的又是偏向嵌入式应用方面的工作,所以很多时候,面对着浩瀚的计算机知识海洋,总是感到
力所不逮。从MIT6.828到CS143,这两个课程中,更是看出了自己的真实水平,其实我自己心里也清楚,在未参考答案的情况下,这几个assigment我自己是做不出来的,有时候我总在想,自己要是在大学或者研究生时期久确定了自己以后从事的方向,如果那时候就遇到这些课程,也许会有所不同的,当然也可能还是现在这样。人总是走在命运规定的道路上。
这个笔记记录下自己的心得,供自己后面回忆,如若有缘人刷到这篇笔记,望见谅,不能提供有用的信息,只是一些总结以及心得。

1 前言

我在做这次的assignment之前,首先看了《flex&bison》的第一章和第二章,对flex有了初步的理解之后,理解题意,参考答案,以及做题,都有很大的提升。

2 PA2整体架构

  1. assignments/PA2下Makefile

    1. make lexer — 编译生成可执行文件lexer,即词法分析器。这个程序接受.cl文件作为参数,然后对这个.cl文件进行解析。
    2. make dotest — 编译lexer,然后使用lexer对test.cl进行词法分析。
  2. cool.flex
    flex文件,符合flex的格式,我们将这个文件通过flex生成C代码,即能解析.flex文件中注明的正则表达式的有限状态机代码,我们可以使用这部分代码进行编译,生成词法分析器lexer。

  3. lextest.cc
    主函数所在的文件。main函数通过fopen来打开文件,然后调用flex生成的cool_yylex()函数字符匹配。cool_yylex()的返回值我们可以通过.flex文件自己控制。其返回值应该是一个token标记,标记匹配到的字段是operator,keyword还是identifier等等,之后将匹配得到的字段调用dump_cool_token函数进行处理。

  4. test.cl
    cool语言测试代码,用于测试你的flex的代码是否能够全部且正确分析得到所有的字段。

  5. list.h
    这个文件实现了一个简单的链表。提供三个简单的函数,构造函数List::List,将一个新的元素加入到链表的头部;hd(),返回链表的头部;tl(),返回链表的尾部。list_length(list* l), 返回链表的长度;list_print(S& str, List* l),打印链表l
    的每个元素到str中;list_map(void f(T*), List* l),对链表的每个元素调用函数f。在string table和symbol table中会用到这个数据结构。

  6. String Tables(stringtab.h)
    String Table用来存储identifier,numerical constants和string constants。在这个文件中,String Table使用的是类型Entry – 每个Entry存储了string,length of string,and an integer index unique to the string。
    这个文件中我们提供了3种类型的String Table,分别是IdTable(用于存储identifier的信息),StrTable(用于存储String Constant的信息),IntTable(用于存储Numerical Constant的信息)。每个S

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值