编译原理实验
weixin_44040169
这个作者很懒,什么都没留下…
展开
-
操作系统实训
本次实训的题目是操作系统整体设计,要求为设计一个小型的操作系统,主要包括打开文件(文件管理)、 为文件分配内存(存储管理, 选择任意的内存分配方法)和进程调度(处理机管理,选择任意的调度算法),至少3个进程。实现操作系统,子任务:文件管理子系统,内存分配子系统,进程调度机制。数据结构选择的链表进行模拟内存分配的顺序存储分配,最佳分配和最差分配;进程调度采用的队列形式存储进程,模拟进程调度的实现先来先服务(FCFS)、短作业优先(SJF)、高优先权优先(HPF)、高响应比优先(HRRF)、时间片轮转(RR原创 2021-01-18 15:50:56 · 669 阅读 · 0 评论 -
编译原理实训
完成 1.词法分析 2.语法分析 3.语义分析和中间代码生成 4.代码优化 5.目标代码生成文法:1<程序>→<main关键字>(){<声明序列><语句序列>}Project->main(){DeclareStatement}2<声明序列>→<声明序列><声明语句>|<声明语句>|<空>Declare->DeclareSe|Se|&-------------------原创 2021-01-18 15:43:10 · 1205 阅读 · 0 评论 -
N - DAG优化
N - DAG优化Description大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。Input输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * /例如:A=B+COutput通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。PS:保证AB的值不同SampleInput3A=B+CB=B+BA=C+COutput原创 2020-11-28 20:10:16 · 928 阅读 · 0 评论 -
P - 简单的代码生成程序
P - 简单的代码生成程序Description通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有 > 空寄存器 > 内存中存有 > 以后不再使用 > 最远距离使用Input单组输入,给定输出的三地址代码的个数和寄存器的个数.所有的变量为大写字母,寄存器的数量不超过9Output参照示例格式输出,不需要将最后的寄存器中的值写回内存不再使用变量不用写回内存SampleInput4 2T:=A-BU:=A-CV:=T+UW原创 2020-11-28 18:59:19 · 1476 阅读 · 0 评论 -
M - 翻译布尔表达式
M - 翻译布尔表达式Description大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。Input输入为一行字符串,例如: a < b or c < d and e < f每个符号都用空格间隔。其中逻辑运算符包含 and 和 or , 关系运算符包含 < 、> 、<= 、 >= 、== 、 != 。Output假链跳到0,真链跳到1,表达式序号从100开始排。SampleInputa < b or c原创 2020-11-16 18:37:49 · 195 阅读 · 0 评论 -
E - 表达式语法分析——预测分析法
E - 表达式语法分析——预测分析法Description预测分析法是自顶向下分析的一种方法,一个预测分析程序是由三个部分组成:(1) 预测分析程序(2) 先进后出栈(3) 预测分析表现给出表达式文法:E→TGG→+TG | εT→FSS→*FS | ε F→(E) | i该表达式文法是LL(1)文法,其预测分析表为:请根据该预测分析表构造预测分析程序,完成对表达式的语法分析,对给定的输入串,判断其是否为合法表达式,给出所使用的产生式序列。Input给定输入串(长度不超过50原创 2020-11-04 17:33:19 · 471 阅读 · 0 评论 -
C - 小型Basic编译器问题(编译原理)
C - 小型Basic编译器问题Description编写一个TinyBasic语言的解释程序,对于任何一个给出的正确的TinyBasic语言的程序,你的程序能运行它并得到正确的结果。那么,怎样的TinyBasic的程序叫做正确的呢?(1)符合TinyBasic语言的语法规则;(2)程序执行时会产生一个或多个输出,可以中断(即程序不会进入无限循环状态)。TinyBasic语言的语法规则:(1)每一行的TinyBasic程序都是下面这样的形式(所有出现的字母均为大写)[<空格>]&l原创 2020-10-21 17:17:17 · 870 阅读 · 0 评论 -
编译原理实验 D - 表达式语法分析——递归子程序法
#include <stdio.h>#include <stdlib.h>int k,cn;char str[55];void E();void G();void T();void S();void F();void G(){ //if()里判断的是表达式左边的First集 要是First集都没满足直接判断错误退出程序 if(str[k]=='+')//由于递归没法完全退出,只能退出程序所以用 exit(0)表示程序正常退出 exit(1)表示程序原创 2020-10-08 10:16:14 · 899 阅读 · 0 评论