编译原理实验报告二_第1页
编译原理实验报告二_第2页
编译原理实验报告二_第3页
编译原理实验报告二_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论