一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
(遇到错误时可显示“Error”,然后跳过错误部分继续显示)二、实验预习提示1、词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。
词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。
本实验中,采用的是按类来安排种别码的方式。
2、部分单词的BNF表示(可参考教材43页的状态转换图)->->|||ε->->|ε->+->-->>->>=3、做词法分析器需要把对象语言的词法全部描述出来,在这我们取C语言子集,它的词法如下:(1)关键字mainifelseintreturnvoidwhile……..所有的关键字都是小写。
(2)专用符号=+-*/<=>>===!=;
:,{}[]()(3)空格和空白、制表符和换行符。
空格一般用来分隔ID、NUM、专用符号和关键字,在词法分析阶段通常被忽略。
各种单词符号的种别码,这是一种符号一个编码的设计。
只供参考!单词符号 种别码 单词符号 种别码main 2 [ 28int 1 ] 29char 3 { 30If 4 } 31else 5 , 32for 6 : 33while 7 ; 34ID 10 > 35NUM 20 = 37+ 22 +”,当前字符为’>’,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢?显然,只有知道下一个字符是什么才能下结论。
于是分析器读入下一个字符’+’,这时可知应将’>’解释为大于运算符。
但此时,超前读了一个字符’+’,所以要回退一个字符,词法分析器才能正常运行。
在分析标识符,无符号整数等时也有类似情况。
5、模块结构见附图三、实验过程和指导:(一)准备:1.阅读课本有关章节,明确语言的语法,写出基本保留字、标识符、常数、运算符、分隔符和程序例。
2.编制好程序。
3.准备好多组测试数据。
(二)上机调试:(三)程序要求:程序输入/输出示例:如源程序为C语言。
输入如下一段:main(){inta,b;a=10; b=a+20;}要求输出如右图。
(2,“main”)(5,“(”)(5,“)”)(5,“{”)(1,“int”)(2,“a”)(5,“,”)(2,“b”)(5,“;”)(2,“a”)(4,“=”)(3,“10”)(5,“;”)(2,“b”)(4,“=”)(2,“a”)(4,“+”)(3,“20”)(5,“;”)(5,“}”)说明:识别保留字:if、int、for、while、do、return、break、continue;
单词种别码为1。
其他的都识别为标识符;
单词种别码为2。
常数为无符号整形数;
单词种别码为3。
运算符包括:+、-、*、/、=、>、=、<=、!=;
单词种别码为4。
分隔符包括:,、;、{、}、(、);
单词种别码为5。
以上为参考,具体可自行增删。
程序思路(参考):这里以开始定义的C语言子集的源程序作为词法分析程序的输入数据。
在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表。
经过词法分析后,源程序字符串(源程序的外部表示)被翻译
2025/5/25 6:43:53 4KB 词法分析
1
绝地求生:易语言全套加速器源码【更新日期:2018年1月10日】使用说明:用FTP将后台文件用二进制上传到网站根目录后安装网站安装好后登陆后台添加产品然后把激活码输入都源码里,产品ID,通信秘钥在后台添加产品后获取,并输入然后搜索HTTP把所有HTTP网址改成自己的域名即可后台设置公告(重要)不设置会导致软件无法启动格式为公告内容||网址添加游戏:在M文件夹中route就是存放游戏路由表的地方打开1||英雄联盟||http://域名/m/route/yxlm.txt||http://域名/m/route/1.png||0序号||游戏名称||游戏路由表地址||游戏LOGO地址||后面的0代表国内游戏,1则为国外游戏路由表格式参考:add1.207.140.0mask255.255.255.0IPMETRICdefaultIFIFZadd14.17.12.0mask255.255.255.0IPMETRICdefaultIFIFZadd14.17.13.0mask255.255.255.0IPMETRICdefaultIFIFZadd14.17.14.0mask255.255.255.0IPMETRICdefaultIFIFZ线路添加:网游加速的线路分别存放在这两个文件里面国内跟国外,格式为线路名称||IP||用户名||密码网络加速则存放在编写好节点文档后,采用附赠的加密工具加密后上传到网站根目录即可充值系统注:后台必须把充值卡位数改成10位以内,太多字符会导致充值出错!1.首先打开注册个账号http://www.1ka123.com/dashboard/index2.打开雷盾的后台获取客户ID3.地址高级=》在线售卡4.这里写上客户ID然后点编辑刷新5.获取提卡数据6.在易卡上面找到商品/分类的商品列表点编辑7.平台对接写雷盾对接密匙写提卡数据然后点保存这样子就可以实现无卡的时候自动补卡了软件对接:打开源码目录下的扫码支付模块按下列格式写入你的卡类信息比如我这里增加月卡修改完即可收款实现自动充值
1
中国Linux内核开发者大会十周年演讲稿(中兴通讯谢宝友)-Linux内存屏障
2025/5/23 18:58:52 1.95MB CLK 中兴通讯 谢宝友 内存屏障
1
通用收据打印系统是一款针对通*用性“收款收据”进行打印并对收据内容保存管理的软件。
功能简单但很实用!适用于电子产品、办公产品、各类零部件产品等有实物交易的店铺为客户开具收据使用。
主要特点:01、支持自定义纸张尺寸并可设置241/190/A4/B5等多种规格的打印纸张。
02、自动合计总金额。
03、自动生成人民币大写。
04、可对收据进行保存、修改、删除、查询等管理操作。
05、可自定义打印模版(自定义标题、备注、加收讫印章等)。
06、支持导出到Excel统计销售情况。
07、权限管理和数据备份。
08、智能关联产品名、单位及单价。
09、可以纠正打印时出现的偏差。
10、可通过代码快速录入商品名。
修复说明:01、第一次进入软件,需要随意注册一下,解除所有功能限制;
02、真正解决了打印保存的数据超出20条,无法继续使用的限制;
03、真正解决了打印保存的数据超出20条,重启软件需要重新注册效验;
04、真正解决了打印保存的数据超出20条,保存的数据自动清空的情况;
05、真正解除了“销售统计”功能无法使用的限制;
06、真正去除了打印票据台头有“试用版”水印字样。
初始登陆信息:用户名:admin密码:空登录说明:(1)本软件默认有一个用户“admin”,无密码。
(2)可以选择“下次直接登录”,下次登录时不再出现登录对话框。
(3)您可以通过“设置”中的“设置用户”模块来更改和删除用户以及“取消直接登录”。
2025/5/23 13:01:16 2.36MB 收据打印系统
1
二、数学运算:共10题,每题1分,共10分。
你可以在草稿纸上运算,要求你充分利用所给条件,寻找解决问题的捷径。
【例题】84.78元、59.50元、121.61元、12.43元以及66.50元的总和是:A.343.73B.343.83C.344.73D.343.82解答:正确答案为D。
实际上你只要最后一位小数加一下,就会发现和的最后一位数是2,只有D符合要求。
就是说你应当动脑筋想出解题的捷径。
2025/5/23 13:47:07 294KB 2005年广东省行政能力测试真题
1
《Scratch课程案例包》第2学期第二学期课程大纲作品名称知识点类别备注1《汇率计算器》问答、侦测条件实用工具类2《接苹果游戏》侦测条件、变量、重复执行、侦测条件互动游戏类3《换装小游戏》外观类积木、广播消息互动艺术类4《弹球大战小游戏》键盘实际、侦测条件、变量、运动类积木互动游戏类5《散步的小马儿》绘图、克隆、特效、下一个造型互动艺术类6《认识神秘的宇宙》重复执行、运动类积木、计时器科学探索类7《疯狂的滑板》键盘事件、侦测条件、造型切换、变量、重复执行互动游戏类8《小孔成像实验》绘画、广播消息、变量、特效互动游戏类9《雪花球》外观类积木、广播消息、声音类积木、随机数科学探索类10《垃圾分类知多少》运算积木块、重复执行、侦测条件互动艺术类11《美好的清晨》重复执行、克隆、侦测条件、造型切换、变量互动艺术类12《量角器的使用》外观类积木、广播消息、重复执行、问答实用工具类
2025/5/21 17:49:02 16.71MB Scratc
1
这本是高清版学习OFDM值得一读。
全书共分10章。
第1章简要介绍无线通信系统的发展历程以及无线衰落信道的基本特性;
第2章介绍OFDM技术的基本原理与特性;
第3章叙述了OFDM技术内峰值平均功率比的问题,并且讨论若干抑制过高峰均比的方法;
第4章详细介绍OFDM技术内非常关键的同步问题;
第5章介绍OFDM技术内的信道估计;
第6章针对动态功率、比特分配在OFDM系统内的灵活应用进行讨论;
第7章介绍各种编码在OFDM技术内的应用,并且讨论最新的编码方法;
第8章分析多种不同的多址方案与OFDM技术的结合;
第9章详细介绍OFDM在多个领域内的应用,其中包括DAB、DVB、WLAN和ADSL等;
最后第10章简单介绍未来移动通信系统(NextG)的关键概念,以及适于传输高速数据流的MIMOOFDM系统。
本书可作为通信工程技术人员和通信专业的本科生、研究生的参考书。
2025/5/21 9:22:33 14.89MB OFDM 移动通信 昆工 西电
1
《Java课程设计案例精编(第二版)》-黄晓东完整源代码零积分案例1骑士游历程序的开发案例2小小画图板的开发案例3俄罗斯方块游戏的开发案例4Mini人事管理系统的开发案例5校园IP查询系统的开发案例6学生信息管理系统的开发案例7超市管理系统的开发案例8高考管理系统的开发案例9雇员信息管理案例10运动会成绩管理系统
2025/5/20 15:11:11 4.22MB Java 课程设计 案例精编 完整源代码
1
【DM365_NAND启动模式解析】DM365是一款由TexasInstruments(TI)生产的数字媒体处理器,常用于视频处理和嵌入式系统。
在DM365中,NAND闪存是一种常见的非易失性存储器,用于存储固件和操作系统。
NAND启动模式是指DM365在上电或复位后从NAND闪存中加载启动代码的过程。
此过程涉及一系列复杂的步骤,确保系统能够正确地从NAND中读取和执行固件。
**NAND启动流程**1.**初始化**:系统首先初始化RAM1的高2KB栈空间(0x7800-0x7fff),避免覆盖用于存储UBL块号的最后32个字节(0x7ffc-0x8000)。
2.**禁止中断**:所有中断(IRQ和FIQ)被禁用,以确保启动过程不被打断。
3.**设置DEEPSLEEPZ/GIO0**:这个外部引脚在NAND启动时必须处于高电平。
4.**读取NANDID**:读取NAND闪存的设备ID,获取设备特性,如页面大小、块大小等。
5.**初始化NAND区域**:根据NAND的参数设置控制器和寄存器。
6.**搜索UBL描述符**:RBL(ROMBootloader)在block1的page0开始搜索UBL(UserBootLoader)的描述符。
如果未找到正确的UBL,会依次检查接下来的24个块,以防遇到坏块。
7.**处理UBL描述符**:UBL描述符包含入口点地址、占用的NAND页数、起始块和起始页等信息,用于指导UBL的加载和执行。
8.**ECC错误检测和校正**:开启硬件ECC(ErrorCorrectionCode)检测,复制UBL到IRAM(InternalRAM)。
如果检测到4位ECC错误,通过ECC算法进行纠正。
如果多次失败,RBL会尝试下一个块,直到找到有效的UBL描述符,或者在搜索完24个块后转而从SD卡启动。
9.**启动UBL**:在UBL的入口点执行代码,将控制权交给UBL。
10.**安全启动模式**:根据配置,启动模式可能包括PLL旁通模式,不使用快速EMIF、DMA或I-Cache。
在其他模式下,这些功能可以被启用以提高性能。
**NANDUBLdescriptor格式**UBL描述符是一个包含关键信息的数据结构,用于指示如何加载和执行UBL。
它可能包含如下字段:-入口点地址:UBL执行的起点。
-UBL占用的NAND页数:指示UBL的大小,必须是连续的页。
-UBL的起始块和起始页:定义UBL在NAND中的位置。
-MAGICIDs:特定的标识符,用于识别不同的启动模式。
**NAND启动详细流程**1.初始化栈空间、禁止中断、设置DEEPSLEEPZ/GIO0。
2.读取NAND设备ID,初始化NAND控制器。
3.搜索UBL描述符,最多遍历24个块。
4.复制并校验UBL到IRAM,根据UBL描述符配置启动选项。
5.转交控制权给UBL执行。
NAND启动流程图和具体的ARMNANDROMBootloader实例进一步详细说明了这个过程。
此外,支持的NAND设备ID列表确保了对多种NAND闪存设备的兼容性。
DM365的NAND启动模式解析涉及了设备识别、错误检测、固件加载和执行等多个环节,确保了系统的稳定和可靠启动。
理解这一过程对于开发和调试基于DM365的嵌入式系统至关重要。
2025/5/20 16:04:21 249KB DM365
1
【DM365启动机制与Boot】深入解析

DM365是一款由德州仪器(TI)推出的DaVinci系列数字媒体处理器,广泛应用于多媒体设备、视频处理和图像处理等领域。
其启动过程涉及到复杂的硬件初始化和软件加载流程,理解这一过程对于开发和调试基于DM365的系统至关重要。


DM36X的启动机制遵循一个标准的流程,当系统加电或复位后,CPU会从预先设定的地址读取第一条指令。
DM36X提供了多种启动方式,主要分为两种:通过外部存储器接口AEMIF(NOR Flash/OneNand)引导启动和通过ARM内部ROM(AIROM)引导启动。
启动模式的选择由BTSEL[2:0]引脚的状态决定。


例如,当BTSEL[2:0]设置为001时,系统将从AEMIF执行引导启动代码,即从外部的OneNand或Nor Flash启动。
而AIROM则支持多种启动模式,包括BTSEL[2:0]=000的NAND Boot,BTSEL[2:0]=010的MMC/SD Boot,以及BTSEL[2:0]=101的SPI Boot等。


Nand Boot Mode是DM365的一种常见启动方式,但因为处理器的AIRAM空间有限且NAND Flash不支持XIP(执行-in-place)技术,因此需要经过三个阶段的代码来完成从NAND Flash引导启动操作系统。
这一流程包括了初始化硬件、加载用户引导加载器(UBoot)到内存以及执行UBoot。


User Bootloader是DM365启动过程中的关键部分,其源码主要位于PSP包的board_utilities/flash_utils目录下。
入门代码由汇编文件start.S开始,负责切换操作模式、建立堆栈,并跳转到main函数。
在main函数中,LOCAL_boot函数负责实际的引导功能,包括调用Device_init()和NANDBOOT_copy()。


Device_init()函数完成了平台的底层初始化,如电源域、时钟、DDR、EMIF、UART、I2C和TIMER等模块的设置。
它首先屏蔽和清除中断,然后通过调用DEVICE_PSCInit启用各模块的电源和时钟,接着配置PINMUX,设置PLL1,配置DDR控制器,EMIF模块,串口0,TIMER0和I2C控制器。


当检测到启动模式配置寄存器(BOOTCFG)的BTSEL[2:0]为000时,系统将调用NAND_init()初始化NAND Flash,并通过NANDBOOT_copy()将紧随其后的Bootloader代码复制到DDR2内存中,以便于后续的程序执行。


Bootloader是嵌入式系统的重要组成部分,它的主要任务是为操作系统提供加载环境。
Bootloader的特点包括:早期系统初始化、设备驱动加载、引导操作系统、支持交互式操作等。
根据工作模式,Bootloader可以分为固件阶段和加载阶段,前者主要负责硬件初始化,后者则负责加载操作系统映像。


DM365的启动过程涉及到硬件配置、软件加载和系统初始化等多个环节,对开发人员理解和优化系统性能具有深远的影响。
了解这些知识,可以帮助我们更好地理解和调试基于DM365的系统,提高其稳定性和效率。
2025/5/20 13:14:23 530KB
1
共 1000 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡