编译原理实验报告二_第1页
编译原理实验报告二_第2页
编译原理实验报告二_第3页
编译原理实验报告二_第4页
编译原理实验报告二_第5页
全文预览已结束

下载本文档

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

文档简介

编译原理实验报告2名称:学号:课程:10级家庭1.为Pascal源程序编写预处理程序。这个程序的作用是,每次调用时,将以下整个语句发送到扫描缓冲区,删除注释行,打印源代码列表。%(* lexical analyzer for Pascal)%(*此程序扫描比较关键字表以标识关键字*。)(*定义流程和函数*)Procedure commenteof(*确认并返回错误输入*)Beginwriteln(YY line no unexpected eof inside comment at line,YY line no);end(* comment eof *);Function upper (str:字符串):字符串;(*将字符串转换为大写*)Var I : integerBeginFor I :=1 to length(str) dostrI:=up case(strI);Upper :=strend(* upper *);function is _ keyword(id : string;var token : integer): boolean;(*验证id是否为Pascal关键字;如果是,则返回token中相应的token number *ConstId _ len=20Typeident=stringid _ len;Const(* Pascal关键字表: *)(使用* Pascal关键字表: *)No _ of _ keywords=39Keyword : 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、PROCEDURE、程序、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、_FUNCTION、_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 : integerBeginid :=upper(id);(*二分法搜索: *)m :=1; n :=no _ of _ keywordsWhile m=n doBegink :=m(n-m)div 2;If id=keywordk thenBeginIs _ keyword :=truetoken :=keyword _ tokenkk;ExitEndElse if idkeywordk thenM :=k 1ElseN :=k-1EndIs_keyword :=falseend(* is _ keyword *);%32;n quote%(*规则部分*)%Var c : charKw : integer%a-za-z(a-za-z0-9)* if is _ keyword(yym text,kw) thenReturn(kw)Elsereturn(IDENTIFIER);:= return(ASSIGNMENT);( NC quote |)return(character _ string);: return(COLON);, return(COMMA);0-9return(DIGSEQ);.return(DOT);.return(dot dot);= return(EQUAL);= return(GE);return(GT);“return(LBRAC);= return(LE);( return(LPAREN);return(LT);- return(MINUS);return(NOTEQUAL);返回(plus);“return(RBRAC);0-9 . 0-9return(real number);() return(r paren);return(semic olon);/ return(SLASH);* return(STAR);* * return(star star);-|返回(up arrow);(* |beginRepeatC :=get _ charCase c of :* : beginC :=get _ charIf c=) then exit else unget_char(c)End#0 : beginCommenteofExitEndEndUntil falseEnd n t f;return(ILLEGAL);2.结合示例3-3和示例3-4的状态图,设计和实现一次返回一个单词种类和属性的词法分析器函数。考虑关键字if、then、while、do。准备主程序以完成测试(输入和输出)。Int code,valuestrtoken :=;GetChar();GetBC();If(IsLetter()BeginWhile (isletter()或isdigiit()Beginconcat();GetChar();Endretract();code :=Reserve();If(code=0)Begin值:=insert id(strt oken);Return($ID,value);EndElse if(IsDigit()BeginWhile(IsDigit()Beginconcat();GetChar();Endretract();值:=insert const(str token);Return(%INT,value);EndElseif (ch=/) return ($ div,-);Elseif (ch=) return ($ as sgin,-);Elseif (ch=) return ($ plus,-);Elseif (ch= * )BeginGetChar();If (ch= *) return ($ power,-);retract();Return($STAR,-);Endelse if(ch=;)return ($ semiicon,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论