下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.编译原理实验报告二姓名: 学号:班级:10级计科一班1.编写一个对于Pascal源程序的预处理程序。该程序的作用是,每次被调用时都将下一个完整的语句送进扫描缓冲区,去掉注解行,同时要对源程序列表打印。%(* lexical analyzer for Pascal)%(* 本程序通过扫描对照关键字表来识别关键字 *)(* 过程和函数定义 *)procedure commenteof;(* 检查并返回错误输入 *) begin writeln(unexpected EOF inside comment at line , yylineno); end(*commenteof*);function
2、 upper(str : String) : String; (* 将字符串转换为大写 *) var i : integer; begin for i := 1 to length(str) do stri := upCase(stri); upper := str end(*upper*);function is_keyword(id : string; var token : integer) : boolean; (* 检查 id 是否为 Pascal 关键字; 若是, 返回 token 中相应的 token number *) const id_len = 20; type Ident
3、 = stringid_len; const (* Pascal 关键字表: *) (* 用 Pascal 关键字表: *) no_of_keywords = 39; keyword : array 1.no_of_keywords of Ident = ( AND, ARRAY, BEGIN, CASE, CONST, DIV, DO, DOWNTO, ELSE, END, EXTERNAL, EXTERN, FILE, FOR, FORWARD, FUNCTION, GOTO, IF, IN, LABEL, MOD, NIL, NOT, OF, OR, OTHERWISE, PACKED,
4、 PROCEDURE, PROGRAM, RECORD, REPEAT, SET, THEN, TO, TYPE, UNTIL, VAR, WHILE, WITH); keyword_token : array 1.no_of_keywords of integer = ( _AND, _ARRAY, _BEGIN, _CASE, _CONST, _DIV, _DO, _DOWNTO, _ELSE, _END, _EXTERNAL, _EXTERNAL, (* EXTERNAL: 2 spellings (see above)! *) _FILE, _FOR, _FORWARD, _FUNCT
5、ION, _GOTO, _IF, _IN, _LABEL, _MOD, _NIL, _NOT, _OF, _OR, _OTHERWISE, _PACKED, _PROCEDURE, _PROGRAM, _RECORD, _REPEAT, _SET, _THEN, _TO, _TYPE, _UNTIL, _VAR, _WHILE, _WITH); var m, n, k : integer; begin id := upper(id); (* 二分法检索: *) m := 1; n := no_of_keywords; while mkeywordk then m := k+1 else n :
6、= k-1 end; is_keyword := false end(*is_keyword*);%NQUOTE % (* 规则部分 *) %var c : char; kw : integer;%a-zA-Z(a-zA-Z0-9)*if is_keyword(yytext, kw) then return(kw) else return(IDENTIFIER);:=return(ASSIGNMENT);(NQUOTE|)+return(CHARACTER_STRING);:return(COLON);,return(COMMA);0-9+return(DIGSEQ);.return(DOT)
7、;.return(DOTDOT);=return(EQUAL);=return(GE);return(GT);return(LBRAC);=return(LE);(return(LPAREN);return(LT);-return(MINUS);return(NOTEQUAL);+return(PLUS);return(RBRAC);0-9+.0-9+return(REALNUMBER);)return(RPAREN);return(SEMICOLON);/return(SLASH);*return(STAR);*return(STARSTAR);- |return(UPARROW);(* |
8、begin repeat c := get_char; case c of : ; * : begin c := get_char; if c=) then exit else unget_char(c) end; #0 : begin commenteof; exit; end; end; until false end; ntf;return(ILLEGAL);2.合并例 3-3 和例 3-4 的状态图,设计并实现一个词法分析函数,每次返回一个单词种别和属性;考虑关键字if、then、while、do;编制主程序完成测试(输入和输出)。int code,value;strToken:=“”
9、;GetChar();GetBC();If(IsLetter()Begin while(IsLetter() or IsDigit() begin Concat();GetChar(); End Retract(); Code:=Reserve(); If(code=0) Begin Value:=InsertId(strToken); Return($ID,value); end else if(IsDigit() begin while(IsDigit() begin Concat(); GetChar(); End Retract(); value:= InsertConst(strToken); return(%INT,value); end else if(ch=/)return($DIV,-); else if(ch=)return($ASSGIN,-); else if(ch=+)return($PLUS,-); else if(ch=*) begin GetChar(); if(ch=*)return($POWER,-); Retract();return($STAR,-); end else if(ch=;)return($
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成功创业教育试题及答案
- 安康摩托车考试题及答案
- 妇科腹腔镜术后感染的多因素分析及护理对策
- 大数据分析优化神经微创成本结构
- 多部门协作机制社区构建-1
- 2025年中职社会体育(健身指导基础)试题及答案
- 2025年高职(汽车检测与维修技术)汽车底盘电控实训试题及答案
- 2025年大学民族文化艺术(民族手工艺)试题及答案
- 2025年高职人物形象设计(美甲创意设计)试题及答案
- 2025年高职教育学(学前教育学)试题及答案
- (正式版)DB32∕T 5156-2025 《零碳园区建设指南》
- 2025年人教版八年级英语上册各单元词汇知识点和语法讲解与练习(有答案详解)
- 智慧林业云平台信息化建设详细规划
- 监控综合维保方案(3篇)
- 安防监控系统维护与管理方案
- 犊牛兽医工作总结
- JJF(陕) 125-2025 医用移动式 C 形臂 X 射线辐射源校准规范
- 2025届重庆八中学七上数学期末复习检测模拟试题含解析
- 烫熨治疗法讲课件
- 2025年江苏省事业单位招聘考试教师招聘体育学科专业知识试题
- 机械设计年终述职报告
评论
0/150
提交评论