编译原理pl0项目

编译原理pl0修改

项目要求

除了文档里面的要求,还有一些隐藏要求已经被确认了。

  • 可以修改pl0源代码,一般是认为修改pl0编译程序,使得可以运行pl0源代码,但是实际上可以一起修改pl0源代码和pl0编译程序,使得最后可以运行。
  • read和write语句,能够实现读入integer数据和输出integer数据即可,而且从键盘或文件输入输出只要完成一项即可,没必要键盘和文件流都完成,此项目完成的是键盘输入和输出。

环境设置

我是用的Free Pascal IDE,以及Vscode,Vscode可以下载pascal的编译和格式插件,然后在user setting里面设置变量,格式化之后代码格式就会很整齐。
环境设置
{[^}]+}正则表达式替换空,可以去掉所有的注释。
^\s*(?=\r?$)\n正则表达式替换空,可以去掉所有的空行。

part1修改

part1的要求就是可以运行就行了。

文件流的修改

首先是program PL0 ( input, output);,第一行参数可要可不要,可以随后在后面设置,其中有一行代码page(output);代表着输出文件到output里面,可以直接删掉,因为page没有定义。然后在一开始var申明里面加上

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您讲解一下如何用C语言编写PL-0语言的语法分析程序。 首先,PL-0语言是一种类似于Pascal的编程语言,其语法比较简单,只支持基本的控制结构和数据类型。因此,我们可以使用自顶向下的递归下降分析法来实现PL-0语言的语法分析程序。 在编写语法分析程序之前,我们需要先定义PL-0语言的文法。下面是一个简化版的PL-0文法: ``` <程序> ::= <分程序>. <分程序> ::= [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> <常量说明部分> ::= const<常量定义>{,<常量定义>}; <常量定义> ::= <标识符>=<无符号整数> <变量说明部分> ::= var<标识符>{,<标识符>}; <过程说明部分> ::= <过程首部><分程序>;{<过程说明部分>} <过程首部> ::= procedure<标识符>; <语句> ::= <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空语句> <赋值语句> ::= <标识符>:=<表达式> <条件语句> ::= if<条件>then<语句>[else<语句>] <条件> ::= <表达式><关系运算符><表达式> <关系运算符> ::= =|<>|<|<=|>|>= <当型循环语句> ::= while<条件>do<语句> <过程调用语句> ::= call<标识符> <读语句> ::= read'('<标识符>{,<标识符>}')' <写语句> ::= write'('<表达式>{,<表达式>}')' <复合语句> ::= begin<语句>{;<语句>}end <表达式> ::= [+|-]<项>{<加法运算符><项>} <项> ::= <因子>{<乘法运算符><因子>} <因子> ::= <标识符>|<无符号整数>|'('<表达式>')' <加法运算符> ::= +|- <乘法运算符> ::= *|/ <标识符> ::= <字母>{<字母>|<数字>} <无符号整数> ::= <数字>{<数字>} <字母> ::= a|b|...|z|A|B|...|Z <数字> ::= 0|1|...|9 ``` 然后,我们可以按照文法的定义,逐步编写语法分析程序。具体来说,我们可以采用如下的步骤: 1. 定义PL-0语言中的各种符号(如标识符、关键字、运算符、界符等),并定义它们的编码。我们可以使用枚举类型来实现这一过程。 2. 定义语法分析器中需要用到的数据结构,如符号表、语法树等。 3. 编写递归下降分析函数。对于每个非终结符号,我们可以编写一个对应的函数来进行语法分析。在每个函数中,我们可以先判断当前符号是否符合该非终结符号的定义,如果符合,则递归调用子函数进行语法分析;否则,报错并返回。 4. 在主函数中,读入PL-0源代码,调用语法分析函数进行分析,并生成语法树和符号表等数据结构。 5. 如果语法分析成功,则可以生成目标代码(如汇编语言或机器语言),并将其输出到文件中。 以上就是用C语言编写PL-0语言的语法分析程序的一般步骤。当然,具体的实现还需要根据实际情况进行调整和改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值