编译原理实验三一、讨论Oberon-0语言的特点1、保留字与关键字的概念区分保留字只要是用在程序语言的层次架构用途上,比如说IF,THEN,ELSIF,用在程序的循环、分支、判断条件、程序块等组织上,它是程序语言中预定义的,具某些特殊意义规范的单词。
保留字侧重于强调不能被用户作为定义的名字。
关键字是一个只被用在某一部分的程序编程中,关键字在程序语言中同样有特殊的意义特征。
多用于类型定义,如在Oberon中,integer便是用来定义变量类型的关键字。
还有其他的功能如作为程序语言中的某个特定函数的名称,如write,read等(在Oberon中).不同的语言的关键字和保留字的概念区分是不一样的。
例如在C,JAVA中,if,else,while这些都是关键字的范围,而在Oberon中是保留字的范围。
在C语言风格的程序语言中,是将程序控制块的那些保留字也一并归为关键字的。
(这些关键字不可以作为变量,函数的名称,也就是不可以作为程序员使用的标示符)。
2、Oberon与C、Java的差别a)在每逐个个主要的函数过程procedure中,Oberon有begin和end来标志,而在C和java中一般是用花括号来标志。
b)在定义变量时,Oberon是在分号之后,也就是最后在给出具体是什么类型的,而在C、Java中一般是在变量的前面就给出了类型,只是Oberon会先用var说明这是一个变量。
c)Oberon中的可用到数据结构主要有数组,类似C中的结构体,类型选择比较少。
3二、文法二义性讨论该文法没有二义性。
在其他的语言中出现的二义性类型中,比如表达式的parsingtree(存在两颗或以上的parsingtrees)的二义性,需要用算符优先关系来确定的和if-else的匹配问题导致的二义性问题,都在该文法中的EBNF定义中被消除掉了。
1、对于表达式的二义性处理:simple_expression=["+"|"-"]term{("+"|"-"|"OR")term};term=factor{("*"|"DIV"|"MOD"|"&")factor};从中,可以看出*和DIV、MOD这些一定在+-之前就进行运算了。
通过将表达式的将+-和*DIV、MOD等用不同层次的表达式进行定义,消除了这一二义性。
2、对于if-else匹配出现二义性的处理:
2023/3/8 21:01:58 2.96MB Oberon-0
1
BUPT,面向对象程序设计C++-平时作业+期末大作业整合资源包(计算机学院-大二下)大作业为:单词消弭游戏
2023/3/8 21:39:56 18.24MB C++ 北邮 面向对象 大作业
1
vs2019工程文件最终生成docx文件可以打印纸质版
2023/3/6 2:25:17 2.41MB c#
1
Android背诵单词软件源代码,包含了阐明文档。
2023/3/5 11:25:42 3.66MB Android 安卓 记单词 源代码
1
16进制10进制.txt32.txtasm.txtCrctable.txtC标志符命名源程序.txterre.txterre2.txtff.txtfor循环的.txtlist.logN皇后问题回溯算法.txtping.txtre.txtsource.txtwinsock2.txtww.txt万年历.txt万年历的算法.txt乘方函数桃子猴.txt乘法矩阵.txt二分查找1.txt二分查找2.txt二叉排序树.txt二叉树.txt二叉树实例.txt二进制数.txt二进制数2.txt余弦曲线.txt余弦直线.txt傻瓜递归.txt冒泡排序.txt冒泡法改进.txt动态计算网络最长最短路线.txt十五人排序.txt单循环链表.txt单词倒转.txt单链表.txt单链表1.txt单链表2.txt单链表倒序.txt单链表的处理全集.txt双链表正排序.txt反出字符.txt叠代整除.txt各种排序法.txt哈夫曼算法.txt哈慢树.txt四分砝码.txt四塔1.txt四塔2.txt回文.txt图.txt圆周率.txt多位阶乘.txt多位阶乘2.txt大加数.txt大小倍约.txt大整数.txt字符串查找.txt字符编辑.txt字符编辑技术(插入和删除).txt完数.txt定长串.txt实例1.txt实例2.txt实例3.txt小写数字转换成大写数字1.txt小写数字转换成大写数字2.txt小写数字转换成大写数字3.txt小字库DIY-.txt小字库DIY.txt小孩分糖果.txt小明买书.txt小白鼠钻迷宫.txt带头结点双链循环线性表.txt平方根.txt建树和遍历.txt建立链表1.txt扫描码.txt挽救软盘.txt换位递归.txt排序法.txt推箱子.txt数字移动.txt数据结构.txt数据结构2.txt数据结构3.txt数组完全单元.txt数组操作.txt数组递归退出.txt数组递归退出2.txt文件加密.txt文件复制.txt文件连接.txt无向图.txt时间圈套.txt杨辉三角形.txt栈单元加.txt栈操作.txt桃子猴.txt桶排序.txt检出错误.txt检测鼠标.txt汉字字模.txt汉诺塔.txt汉诺塔2.txt灯塔问题.txt猴子和桃.txt百鸡百钱.txt矩阵乘法动态规划.txt矩阵转换.txt硬币分法.txt神经元模型.txt穷举搜索法.txt符号图形.txt简单数据库.txt简单计算器.txt简单逆阵.txt线性顺序存储结构.txt线索化二叉树.txt绘制圆.txt编随机数.txt网络最短路径Dijkstra算法.txt自我复制.txt节点.txt苹果分法.txt螺旋数组1.txt螺旋数组2.txt试题.txt诺汉塔画图版.txt读写文本文件.txt货郎担分枝限界图形演示.txt货郎担限界算法.txt质因子.txt输出自已.txt迷宫.txt迷宫问题.txt逆波兰计算器.txt逆矩阵.txt逆阵.txt递堆法.txt递归桃猴.txt递归车厢.txt递推.txt逻辑移动.txt链串.txt链栈.txt链表十五人排序.txt链表(递归).txt链队列.txt队列.txt阶乘递归.txt阿姆斯特朗数.txt非递归.txt顺序栈.txt顺序表.txt顺序队列.txt骑士遍历1.txt骑士遍历2.txt骑士遍历回逆.txt黑白.txt
1
本数据库源取自sql2000版,考虑如今多数人没装2000版,故转成2005版(兼容以上版本)供大伙使用。
2023/3/4 23:55:39 5.05MB 单词数据库
1
这份源代码是使用C++和Qt库编写的(非本人所写),对Qt初学者比较有协助,至少可以学习Qt库中一些常用控件的使用、信号槽的使用、第三方库的使用、资源的管理等。
2023/3/3 19:51:04 13.18MB C++ Qt 源代码
1
这是我的数据结构课程计划,采用了KMP算法和键树算法统计单词数量
2023/3/3 17:53:10 6KB 键树,KMP
1
亲测非常好用,再也不用担心单词不够了
2023/2/23 6:53:57 70.08MB 背单词神器
1
实验一:词法分析程序一、实验目的   通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的类型码及单词符号的自身值。
(遇到错误时可显示“Error”,然后跳过错误部分继续显示)二、实验要求用C或C++写一个简单的词法分析程序,程序可以满足下列要求:1、能分析如下几种简单的语言词法(1)标识符:ID=letter(letter|digit)*(2)关键字(全部小写)mainintfloatdoublecharifthenelseswitchcasebreakcontinuewhiledofor(3)整型常量:NUM=digitdigit*(4)运算符=+-*/=25整型常量11;26+13(27-14)28*15?29/16:303、词法分析程序实现的功能输入:单词序列(以文件方式提供),输出识别的单词的二元组序列到文件和屏幕输出:二元组构成:(syn,token或sum)其中:syn为单词的种别码token为存放的单词自身符号串sum为整型常数例:源程序:intab;
floatef=20;
ab=10+ef;
输出:(保留字--1,int)(标识符--10,ab)(分号--26,;)(保留字--2,float)(标识符--10,ef)(等号--17,=)(整数--11,20)(分号--26,;)(标识符--10,ab)(等号--17,=)(整数--11,10)(加号--13,+)(标识符--10,ef)(分号--26,;)4、自己准备测试数据存放于TestData.txt文件中,测试数据中应覆盖有以上5种数据,测试结果要求以原数据与结果对照的方式输出并保存在Result.txt中,同时要把结果输出到屏幕。
5、提前准备① 实验前,先编制好程序,上机时输入并调试程序。
准备好多组测试数据(存放于文件TestData.txt中)。
6、写出实验报告 报告格式:要求有实验名称、实验目的、实验要求、实验内容、实验小结。
其中实验内容包括算法分析、程序流程图及程序代码。
2023/2/21 22:09:07 7KB 词法分析 源代码
1
共 341 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡