决战编译原理项目👊

很乱的一篇文章,和我写编译原理的脑子一样混乱,酌情观看

二战编译原理项目👊

预估时间线:1.24晚搞定实验一的全部(除了画图)1.25白天搞定实验二的全部(包括画图)1.26搞定实验三 实验一再确定一次,应该变化不大,但是要知道怎么改\

项目任务一要求

(1)以文本文件的方式输入某一高级程序设计语言的所有单词对应的正则表达式,系统需要提供一个操作界面,让用户打开某一语言的所有单词对应正则表达式文本文件,该文本文件的具体格式可根据自己实际的需要进行定义。(2)正则表达式应该可以支持命名操作,运算符号有: 转义符号(\)、连接、选择()、 闭包(*)、正闭包(+)、[]、 可选(?)、 括号()(3)要提供一个源程序编辑界面,让用户输入一行(一个)或多行(多个)正则表达式(可保存、打开正则表达式文件)(4)需要提供窗口以便用户可以查看转换得到的NFA(用状态转换表呈现即可)(5)需要提供窗口以便用户可以查看转换得到的DFA(用状态转换表呈现即可)(6)需要提供窗口以便用户可以查看转换得到的最小化DFA(用状态转换表呈现即可)(7)将最小化得到DFA图转换得到的词法分析源程序(该分析程序需要用C/C++语言描述,而且只能采用讲稿中的转换方法一或转换方法二来生成源程序),系统需提供窗口以便用户可以查看转换得到的词法分析源程序,(8)对要求(7)得到的源程序进行编译生成一个可执行程序,并以该高级程序设计语言的一个源程序进行测试,输出该该源程序的单词编码。需要提供窗口以便用户可以査看该单词编码。(9)对系统进行测试:(A)先以TINY语言的所有单词的正则表达式作为文本来测试,生成-个TINY语言的词法分析源程序(B)接着对这个词法分析源程序利用C/C++编译器进行编译,并生成可执行程序(C)以sample.tny来测试,输出该TINY语言源程序的单词编码文件sample.lex.(10)要求应用程序为Windows界面(11)书写完善的软件文档

标黄为新增条件(w|{o*})*(dd*o|l(l|d)*o|:(=|o)|o|<(>|=|o)|o|>(=|o)|o)

项目要求二(1) 以文本文件的方式输入某一高级程序设计语言的所有语法对应的 BNF 文法,因此系统需要提供一个操作界面,让用户打开某一语言的所有语法对应的 BNF 文法的文本文件,该文本文件的具体格式可根据自己实际的需要进行定义。(2) 求出文法的每个非终结符号的 First 集合和 Follow 集合,并需要提供窗口以便用户可以查看该结果(可用两张表格的形式分别进行呈现)(3) 需要提供窗口以便用户可以查看文法对应的 LR(1)DFA 图。(可以用画图的方式呈现, 也可用表格方式呈现该图点与边数据)(4) 需要提供窗口以便用户可以查看文法对应的 LALR(1)DFA 图。(可以用画图的方式呈现,也可用表格方式呈现该图点与边数据)(5) 需要提供窗口以便用户可以查看文法对应的 LALR(1)分析表。(如果该文法为 LALR(1) 文法时)【LALR(1)分析表采用表格的形式呈现】(6) 打开一个与上述所输入 BNF 文法对应的程序设计语言的源程序,并采用 LALR(1)语法分析方法对这个源程序中的每个语句进行语法分析,需要提供窗口以便用户可以查看对应的语法分析过程。【可以使用表格的形式逐行显示分析过程】(7) 在(6)的分析过程中同时生成相应的语法树,需要提供窗口以便用户可以查看对应的语法分析过程(语法树需要采用树状形式进行呈现)。【每个语句的语法树结构可根据实际的需要进行定义。】(8) 以 TINY 语言的所有语法以及第一项任务的测试结果 sample.lex 作为测试,并生成对应的语法树并呈现出来。(9) 要求应用程序为 Windows 界面\

任务一

正则 -- nfa

  1. 添加连接运算符

  2. 正则转逆波兰式

  3. 逆波兰转nfa

\

Nfa -- dfa

子集构造法\

Dfa -- 最小dfa

分割法

@startuml
package "系统功能结构" {
    rectangle "加载正则表达式文件" {
        :用户选择正则表达式文件
        :解析正则表达式文件
    }

    rectangle "编辑与管理正则表达式" {
        :用户输入或编辑正则表达式
        :保存正则表达式文件
    }

    rectangle "生成并展示NFA" {
        :基于正则表达式生成NFA
        :以状态转换表形式展示NFA
    }

    rectangle "生成并展示DFA" {
        :将NFA转换为DFA
        :以状态转换表形式展示DFA
    }

    rectangle "生成并展示最小化DFA" {
        :对DFA进行最小化
        :以状态转换表形式展示最小化DFA
    }

    rectangle "生成词法分析源程序" {
        :基于最小化DFA生成词法分析源程序
        :以代码窗口形式展示源程序
    }

    rectangle "编译并测试词法分析器" {
        :编译词法分析源程序
        :加载测试源代码
        :运行词法分析器
        :输出单词编码
        :以表格形式展示结果
    }

    rectangle "系统功能测试" {
        :使用TINY语言正则表达式测试系统
        :生成词法分析源程序并编译
        :加载sample.tny文件测试
        :输出单词编码到sample.lex文件
    }
}
@enduml


@startuml
package "系统功能结构" {
    rectangle "加载BNF文法文件" {
        :用户选择文法文件
        :解析BNF文法文件
    }

    rectangle "计算First和Follow集合" {
        :分析文法规则
        :计算First集合
        :计算Follow集合
        :显示计算结果
    }

    rectangle "生成并展示LR(1)DFA" {
        :生成LR(1)DFA
        :绘制DFA图
        :以表格形式展示DFA数据
    }

    rectangle "生成并展示LALR(1)DFA" {
        :合并LR(1)DFA状态
        :生成LALR(1)DFA
        :绘制DFA图
        :以表格形式展示DFA数据
    }

    rectangle "生成并展示LALR(1)分析表" {
        :生成LALR(1)分析表
        :以表格形式展示分析表
    }

    rectangle "LALR(1)语法分析过程展示" {
        :加载源程序
        :逐行语法分析
        :以表格形式展示分析过程
    }

    rectangle "生成并展示语法树" {
        :生成语法树
        :以树状形式展示语法树
    }
}
@enduml

生成词法分析

没太懂

这一段是用来干嘛的?3.2.6 TINY_LEX.cpp• 规定TINY语言中所有可能出现的标记• 规定TINY扫描程序DFA中的所有状态• 定义判断当前字符是否属于字母/数字/运算符/保留字/空格的各函数• 对SAMPLE.TNY文件逐行扫描分析• 从START状态开始,switch语句根据最小化DFA实现判断跳转• 依次输出扫描分析结果并存入sample.lex文件中 时间线:16.35 进度只有前四页是完全ok的,现在开始项目一的细化17.03 3.1.1 全部搞定17.35 搞定3.1.218.09 搞定3.2420.20 吃完饭又回来了,中途刷b站狠狠有动力了20.41 3.2.7 不会,先留着21.35 文字全部写完了,但是还有问题

  1. gpt给的函数方法名对不上

  2. 有些步骤写的不够详细

  3. 3.4的测试还没放图片

  4. 项目三还没放测试

1.17 我靠怎么好像没进度啊,就做了个ppt1.45 update

  1. 项目一跑不出来,8、9的操作不会 ==》会了【缺测试例子】

  1. 我靠怎么项目二也跑不起来,老师我心碎了,678不太明白

  2. 要写测试报告吗

周四:上午:问测试例子 + 测试报告要写吗?(应该是要的中午:搞定项目一的文档 + 项目一的测试报告下午:搞定项目一PPT晚上:搞定项目二的文档、PPT、项目二的测试报&#x544A**【搞定完录课外的东西再睡觉,或者直接通宵🤔】** 周五:代码 + 录屏\

分屏一下

9.17 起码是跑出来了,但是任务一关于89的不知道怎么跑

他的整个步骤应该是 项目一
输入正则表达式/BNF文法输入
👉生成NFA、DFA、最小DFA
👉生成词法分析.cpp程序
👉导入tiny code.txt文件并用词法分析程序对这个txt进行分析
👉生成.lex文件

现有bug:项目一:TINY_LEX.cpp 展示不全 0.55 崩溃,感觉没写啥,最后一个晚上了2.43 会写完的吗

  1. 代码【上午】

    1. project1

    2. project2

  2. 文档【下午】

  3. 测试

    1. test1

    2. test2

    3. test3【凌晨】

  4. ppt【中午 + 项目一】

  5. 录课【晚上】

3.18 项目三的任务二进程失败,改成英文路径好了4.09 新改的项目二输出到35的时候error8.41 起床!8.56 搞定代码和测试9.19 项目一ppt完成13.23 完成项目一的录像 预计时间线:1.00 - 1.30 项目二的ppt下午:项目二文档晚上:项目二录像 \

开始思考

(zx一思考!上帝就发笑

首先我们可以分析出来的是: 项目一的注意事项目前有:

  1. 思路

    1. 生成:输入tiny语法 - 生成nfa、dfa、最小dfa - 生成词法分析cpp

    2. 测试:使用cpp对一个txt进行测试,输出lex看是否正确

  2. 【问题分析】单词编码输出格式问题

  3. 【问题分析】cpp生成的质量不高

  4. 代码没什么问题,重点在于文档,预估半天搞定

项目二注意事项:

  1. 思路:

    1. 生成:输入BNF语法 - 生成first、follow、lr1、lalr1

    2. 测试:使用lalr1查看lex的语法分析情况和语法树

  2. 感觉没啥问题

项目三:

  1. 注意测试用例要全覆盖

时间线:1.25 白天把项目二全搞定~~,想好怎么写文档~~1.25 睡觉前把项目一搞定1.26上午把文档全搞定1.26下午做ppt+录视频晚上机动 流程就是:

  1. 代码:

    1. 改功能

  2. 文档:

    1. 3.1 系统设计

      1. 数据结构

        1. 介绍各个类、画个uml

        2. 存储结构和实现功能之间的关系

      2. 系统功能结构11

        1. 介绍核心功能、画个图

    2. 3.2 功能模块设计及实现

      1. 功能描述

      2. 流程图/模式图

      3. 截图

      4. 核心算法代码

    3. 3.3 调试

    4. 3.4 测试

      1. 测试方案

      2. 测试用例

      3. 效果图

    5. 3.5 问题分析

    6. 3.6 使用说明

注释要求:每个源程序文件中注释信息至少包含以下内容:(1)版权信息。 (2)文件名称,标识符,摘要或模块功能说明。 (3)当前版本号,作者/修改者,完成日期。 (4)版本历史信息。//(1)--(4)部分写在文件头 (5)所有的宏定义,非局部变量都要加注释 (6)所有函数前有函数功能说明,输入输出接口信息,以及调用注意事项 (7)函数关键地方加注释。\

1.25 晚上时间线

20.5 前搞定项目一代码注释22.5 前搞定项目一文档(除了图片)睡觉前跑通代码 Prompt非常好,现在我需要撰写各个功能的功能描述(用一段约200字的话概括)、流程图/模块图(是顺序语句/条件判断语句/循环语句的结合,要求和代码紧密相关,非常详细;使用Mermaid绘制)、核心算法代码展示。功能分别是正则表达式文件的加载与解析、正则表达式的命名操作和运算符、正则表达式→NFA、NFA→DFA(子集构造法)DFA → 最小化DFA生成词法分析源程序词法分析器生成。首先是【正则表达式文件的加载与解析】\

1.26 时间线

上午: 任务三包括文档(1.5h) + 文档(也就是任务的截图和把后面的塞进去,1.5h)

晚上:机动 跑通 + 搞定exe就行

我管不了这么多啦!!!!!\

最后更新于