• Stanford CS143 速通PA2教程


    PA2是写一个词义分析器,重点在于理解flex的语法,然后是编写正则表达式。

    速通前的准备

    • PA2.pdf(见我的仓库):写得很多很详细,但是其实读起来的时候,没办法很好地理解是什么意思,建议通读一遍吧。
    • Flex官方文档:读完一遍PA2的文档后,你大概率还是不知道应该干嘛,唯一的办法就是去看Flex的官方文档,弄清楚它是怎么实现词义分析功能的。
    • 偷懒的方法:这篇文章写得很好,实际上你只看这一篇,再看看人家的实现,你就可以比较偷懒地做完这个作业了;当然,你想完全自己写,建议还是上面两个材料,再加上这篇文章前半部分,没涉及到代码的解释,到这里,你应该知道大概要做什么了。
    • 具体的实现:当然,要完成这个作业,只知道大概是不够的,具体的实现主要包括以下部分:
    • 多行注释
    • 单行注释
    • 多字符关键字
    • 各种ERROR的处理
    • 数字
    • 字符串
    • 字符串的转义字符

    能实现以上功能,你的作业就差不多完成了,进一步需要比对你的lexer和reflexer的差别,还有修改测试样例等,这个我也没有往后做得很细。
    当然,怎么实现呢?还是得靠一行行代码写啊,需要掌握的知识有:

    • 基本语法:
    正则表达式 { 处理语句 }
    
    • 1

    写一个正则表达式,然后写出匹配之后应该怎么处理。

    • cool_yylval

    去头文件里面看下它有哪些类,对应着什么功能,弄懂这两步,你就能写大概一半的内容了。

    • <>状态

    通过在定义区定义状态,如我定义一个COMMENT状态:

    %x COMMENT
    
    • 1

    这样就定义好了,你可以用这个状态来专门处理注释,因为注释里面的符号和正文里面的符号处理方式肯定是不一样的,对吧,通过BEGIN()来完成状态的跳转,COMMENT状态的基本语句就是:

    <COMMENT>正则表达式 { 处理语句 }
    
    • 1

    好了,弄懂了状态,你又可以写出一半中的一半了。
    剩下的一半的一半,需要你通过调试,慢慢补全,这样,这个作业就基本做完啦。

    我的体会

    总的来说,当写完之后,并不觉得有多复杂,但是初见的时候,确实是一头雾水,有点像玩魂类游戏的感觉,我的建议是看些已经做过的同志的文档,比如这篇,这样可以加快你通关的过程,有点像去B站找魂类游戏某个boss的速通打法哈哈

    代码实现和资料

    见我的仓库,我写的时候也参考了别人的代码,比如这篇的,不过修改了它们的代码中的不足,比如不能用下划线判断id,多字符关键字的大小写匹配不敏感等等,当然,应该还存在错误,希望有小伙伴能够指出,谢谢!

  • 相关阅读:
    Podman 部署私有镜像仓库
    Java基础-Stream流
    win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版
    使用运放产生各种波形
    stable diffusion为什么能用于文本到图像的生成
    2023-2028年中国高纯纯碱市场运营态势及发展趋势预测报告
    mysql常见命令
    快速搭建DMHS DM之间双向同步
    vector中的迭代器失效问题
    【超分】A Benchmark for Chinese-English Scene Text Image Super-resolution
  • 原文地址:https://blog.csdn.net/ShowMeTheCod3/article/details/126317475