2014年广工编译原理实验报告
编译原理 实验报告

编译原理实验报告编译原理实验报告引言编译原理是计算机科学中的重要课程,它研究的是如何将高级语言程序转化为机器语言程序的过程。
在本次实验中,我们学习了编译原理的基本概念和技术,并通过实践来加深对这些概念和技术的理解。
本报告将对我们在实验中遇到的问题、解决方案以及实验结果进行总结和分析。
实验目的本次实验的主要目的是设计并实现一个简单的编译器,能够将类C语言的源代码翻译成目标代码。
通过这个实验,我们可以更好地理解编译器的工作原理,掌握编译器设计的基本方法和技术。
实验过程在实验中,我们首先对给定的类C语言的语法进行了分析,并根据语法规则设计了相应的语法分析器。
然后,我们使用了自顶向下的递归下降分析法来实现语法分析器。
在实现语法分析器的过程中,我们遇到了一些问题,例如如何处理语法规则中的左递归、如何处理语法规则中的优先级和结合性等。
通过仔细研究相关的文献和资料,我们成功地解决了这些问题,并完成了语法分析器的设计和实现。
接下来,我们对语法分析器进行了测试,并对测试结果进行了分析。
通过测试,我们发现语法分析器在处理简单的源代码时能够正确地识别出语法错误,并给出相应的错误提示。
然而,在处理复杂的源代码时,语法分析器可能会出现一些错误,例如无法正确地处理嵌套的语法结构、无法正确地处理运算符的优先级和结合性等。
为了解决这些问题,我们对语法分析器进行了改进,并进行了多次测试,最终得到了令人满意的结果。
实验结果通过本次实验,我们成功地设计并实现了一个简单的编译器,能够将类C语言的源代码翻译成目标代码。
在实验中,我们对编译器的工作原理有了更深入的了解,掌握了编译器设计的基本方法和技术。
同时,我们也发现了一些问题,并通过不断地改进和测试,最终得到了令人满意的结果。
结论编译原理是一门重要的计算机科学课程,它研究的是如何将高级语言程序转化为机器语言程序的过程。
通过本次实验,我们对编译原理的基本概念和技术有了更深入的了解,并通过实践来加深了对这些概念和技术的理解。
编译原理实验报告2-词法分析程序的设计

实验2 词法分析程序的设计一、实验目的掌握计算机语言的词法分析程序的开发方法。
二、实验内容ﻩ编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。
三、实验要求1、根据以下的正规式,编制正规文法,画出状态图;ﻩ标识符ﻩﻩﻩ<字母>(<字母>|<数字字符>)*ﻩ十进制整数0 | ((1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*)八进制整数0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六进制整数0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*运算符和界符ﻩ+ -*/ >< = ( ) ;ﻩﻩ关键字ﻩﻩif then elsewhile do2、根据状态图,设计词法分析函数int scan( ),完成以下功能:1)从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,2)以二元式形式输出单词<单词种类,单词属性>其中单词种类用整数表示:0:标识符1:十进制整数2:八进制整数3:十六进制整数运算符和界符,关键字采用一字一符,不编码其中单词属性表示如下:标识符,整数由于采用一类一符,属性用单词表示运算符和界符,关键字采用一字一符,属性为空ﻩ3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。
四、实验环境PC微机DOS操作系统或Windows操作系统Turbo C 程序集成环境或Visual C++程序集成环境五、实验步骤1、根据正规式,画出状态转换图;2、根据状态图,设计词法分析算法;观察状态图,其中状态2、4、7、10(右上角打了星号)需要回调一个字符。
声明一些变量和函数:ch:字符变量,存放最新读进的源程序字符。
strToken: 字符串变量,存放构成单词符号的字符串。
GetChar():ﻩ子函数,将下一输入字符读到ch中,搜索指示器前移一字符位置。
编译原理实验报告

编译原理实验报告一、实验目的和要求本次实验旨在对PL_0语言进行功能扩充,添加新的语法特性,进一步提高编译器的功能和实用性。
具体要求如下:1.扩展PL_0语言的语法规则,添加新的语法特性;2.实现对新语法的词法分析和语法分析功能;3.对扩展语法规则进行语义分析,并生成中间代码;4.验证扩展功能的正确性。
二、实验内容1.扩展语法规则本次实验选择扩展PL_0语言的语句部分,添加新的控制语句,switch语句。
其语法规则如下:<switch_stmt> -> SWITCH <expression> CASE <case_list><default_stmt> ENDSWITCH<case_list> -> <case_stmt> , <case_stmt> <case_list><case_stmt> -> CASE <constant> : <statement><default_stmt> -> DEFAULT : <statement> ,ε2.词法分析和语法分析根据扩展的语法规则,需要对新的关键字和符号进行词法分析,识别出符号类型和记号类型。
然后进行语法分析,建立语法树。
3.语义分析在语义分析阶段,首先对switch语句的表达式进行求值,判断其类型是否为整型。
然后对case语句和default语句中的常量进行求值,判断是否与表达式的值相等。
最后将语句部分生成中间代码。
4.中间代码生成根据语法树和语义分析的结果,生成对应的中间代码。
例如,生成switch语句的跳转表,根据表达式的值选择相应的跳转目标。
5.验证功能的正确性设计一些测试用例,验证新语法的正确性和扩展功能的实用性。
三、实验步骤与结果1.扩展语法规则,更新PL_0语法分析器的词法规则和语法规则。
(精选)广工2014编译原理实验报告

实验报告课程名称编译原理题目名称 PL/0编译器的扩充学生学院计算机学院专业班级计算机科学与技术12(4)学号 3112005901学生姓名柏石先指导教师李杨程序功能完成情况测试用例全面程度学生对所编程序熟悉程度报告格式是否与要求相符报告内容是否准确、全面2014 年 12 月 20日一、实验目的与要求对PL/0作以下修改扩充:(1)增加单词:保留字 ELSE,FOR,STEP,UNTIL,DO,RETURN运算符 *=,/=,&,||,!(2)修改单词:不等号# 改为 <>(3)增加条件语句的ELSE子句,要求:写出相关文法,语法描述图,语义描述图。
二、实验环境与工具1、源语言:PL/0语言,PL/0语言是PASCAL语言的子集,它的编译程序是一个编译解析执行系统,后缀名为.PL0;2、目标语言:生成文件后缀为*.COD的目标代码3、实现平台:Borland C++Builder 64、运行平台:Windows 8.1三、结构流程1、结构设计说明(1)PL/0 语言编译器PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。
PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。
2、词法分析程序的设计四、开发过程(一)增加单词:保留字 ELSE,FOR,STEP,UNTIL,DO , RETURN运算符 *=,/=,&,||,!新增6个保留字和5个运算符,合计11个单词。
其中保留字ELSE,FOR,STEP,UNTIL,DO, RETURN分别对应ELSESYM,FORSYM, STEPSYM, UNTILSYM,DOSYM,RETURNSYM;运算符 *= ,/= ,& ,|| ,!分别对应TIMESBECOMES, SLASHBECOMES, ANDSYM, ORSYM, NOTSYM。
注:要求只做词法分析部分,不做语义分析处理,实验的结果只是识别新增的保留字和运算1.首先考虑需要增加保留字的个数,以及如何命名,再将新增的保留字添加对应的保留字的集合中。
广工2014编译原理课程设计报告

课程设计课程名称编译原理题目名称PL/0编译器的扩充学生学院计算机学院专业班级计算机科学与技术12(4) 学号学生姓名柏石先指导教师李杨2014 年12 月28日一、实验目的与要求基本内容(成绩范围:“中”、“及格”或“不及格”)(1)扩充赋值运算:*= 和 /=(2)扩充语句(Pascal的FOR语句):FOR <变量>:=<表达式>STEP<表达式> UNTIL<表达式>Do<语句>选做内容(成绩评定范围扩大到:“优”和“良”)(1)增加类型:①字符类型;②实数类型。
(2)增加注释; 注释由/*和*/包含;(3)扩充函数:①有返回值和返回语句;②有参数函数。
(4)增加一维数组类型(可增加指令)。
(5)其他典型语言设施。
二、实验环境与工具1、源语言:PL/0语言,PL/0语言是PASCAL语言的子集,它的编译程序是一个编译解析执行系统,后缀名为.PL0;2、目标语言:生成文件后缀为*.COD的目标代码3、实现平台:Borland C++Builder 64、运行平台:Windows 8.1三、设计概述1、结构设计说明(1)PL/0编译系统的结构框架源语言:源语言是基于C语言写的PL/0编译程序——PL0语言(可以看成Pascal 语言的子集)目标语言:假想的栈式计算机计算语言,即类PCODE指令代码。
指令格式如下:其中f代表功能码,l表示层次差,a的含意对不同的指令有所区别。
具体的指令功能表:(一)扩充赋值运算:*= 和/=*= 和/=的语法描述图:(二)扩充语句(Pascal的FOR语句)因为在Pascal中的FOR语句描述为:FOR <变量>:=<表达式> STEP <表达式> UNTIL <表达式> DO <语句> 所以增加FOR,STEP,UNTIL,DOFOR语句语法描述图为:1)增加所需要的保留字和运算符,实现*=和/=,以及FOR语句,应该增加TIMESBECOMES,SLASHBECOMES,FOR,STEP,UNTIL,DO。
编译原理实验报告

编译原理实验报告一、实验概述本次实验旨在设计并实现一个简单的词法分析器,即实现编译器的第一个阶段,词法分析。
词法分析器将一段源程序代码作为输入,将其划分为一个个的词法单元,并将其作为输出。
二、实验过程1.设计词法规则根据编程语言的规范和所需实现的功能,设计词法规则,以明确规定如何将源程序代码分解为一系列的词法单元。
2.实现词法分析器采用合适的编程语言,根据所设计的词法规则,实现词法分析器。
词法分析器的主要任务是读入源程序代码,并将其根据词法规则进行分解,生成对应的词法单元。
3.测试词法分析器设计测试用例,用于检验词法分析器的正确性和性能。
测试用例应包含各种情况下的源程序代码。
4.分析和修正错误根据测试过程中发现的问题,分析产生错误的原因,并进行修正。
重复测试和修正的过程,直到词法分析器能够正确处理所有测试用例。
三、实验结果我们设计了一个简单的词法分析器,并进行了测试。
测试用例涵盖了各种情况下的源程序代码,包括正确的代码和错误的代码。
经过测试,词法分析器能够正确处理所有的测试用例。
词法分析器将源程序代码分解为一系列的词法单元,每个词法单元包含了单词的种类和对应的值。
通过对词法单元的分析,可以进一步进行语法分析和语义分析,从而完成编译过程。
四、实验总结通过本次实验,我深入了解了编译原理的词法分析阶段。
词法分析是编译器的第一个重要阶段,它将源程序代码分解为一个个的词法单元,为后续的语法分析和语义分析提供基础。
在实现词法分析器的过程中,我学会了如何根据词法规则设计词法分析器的算法,并使用编程语言实现词法分析器。
通过测试和修正,我掌握了调试和错误修复的技巧。
本次实验的经验对我今后的编程工作有很大帮助。
编译原理是计算机科学与技术专业的核心课程之一,通过实践能够更好地理解和掌握其中的概念和技术。
我相信通过进一步的学习和实践,我能够在编译原理领域取得更大的成果。
编译原理实验报告

编译原理实验报告编译原理实验报告一、实验目的1. 了解编译器的基本原理和工作过程;2. 掌握编译器设计和实现的基本方法和技巧;3. 通过设计和实现一个简单的编译器,加深对编程语言和计算机系统的理解和认识。
二、实验原理编译器是将高级语言程序翻译成机器语言程序的一种软件工具。
它由编译程序、汇编程序、链接程序等几个阶段组成。
本次实验主要涉及到的是编译程序的设计和实现。
编译程序的基本原理是将高级语言程序转换为中间代码,再将中间代码转换为目标代码。
整个过程可以分为词法分析、语法分析、语义分析、代码生成和代码优化几个阶段。
三、实验内容本次实验的设计目标是实现一个简单的四则运算表达式的编译器。
1. 词法分析根据规定的语法规则,编写正则表达式将输入的字符串进行词法分析,将输入的四则运算表达式划分成若干个单词(Token),例如:运算符、操作数等。
2. 语法分析根据定义的语法规则,编写语法分析程序,将词法分析得到的Token序列还原成语法结构,构建抽象语法树(AST)。
3. 语义分析对AST进行遍历,进行语义分析,判断表达式是否符合语法规则,检查语义错误并给出相应的提示。
4. 代码生成根据AST生成目标代码,目标代码可以是汇编代码或者机器码。
四、实验过程和结果1. 首先,根据输入的表达式,进行词法分析。
根据所定义的正则表达式,将输入的字符串划分成Token序列。
例如:输入表达式“2+3”,经过词法分析得到的Token序列为["2", "+", "3"]。
2. 然后,根据语法规则,进行语法分析。
根据输入的Token序列,构建抽象语法树。
3. 接着,对抽象语法树进行语义分析。
检查表达式是否符合语法规则,给出相应的提示。
4. 最后,根据抽象语法树生成目标代码。
根据目标代码的要求,生成汇编代码或者机器码。
五、实验总结通过本次实验,我对编译器的工作原理有了更深入的认识,掌握了编译器设计和实现的基本方法和技巧。
编译原理实验报告

编译原理实验报告一、引言编译原理是计算机科学中的重要课程,它研究了将高级语言翻译为机器语言的方法和技术。
编译器作为实现这一目标的关键工具,扮演着至关重要的角色。
本实验报告将介绍编译原理实验的相关内容,包括实验目的、实验环境、实验步骤和实验结果等。
二、实验目的编译原理实验的主要目的是通过设计和实现一个简单的编译器,来加深对编译原理相关概念和技术的理解。
具体目标包括: 1. 理解词法分析、语法分析、语义分析等编译器的基本原理和流程; 2. 掌握使用Lex和Yacc工具进行词法分析和语法分析的方法; 3. 学会使用C/C++等编程语言实现编译器的基本功能。
三、实验环境本实验使用的实验环境包括: 1. 操作系统:Windows 10; 2. 开发工具:Visual Studio Code; 3. 编程语言:C/C++; 4. 辅助工具:Lex、Yacc。
四、实验步骤本实验的主要步骤如下:4.1 设计语言文法在开始实验之前,我们首先需要设计我们要实现的编程语言的文法。
文法是描述编程语言语法结构的形式化规则,它指定了合法的语法结构和语句构造方法。
我们可以使用BNF(巴科斯范式)或EBNF(扩展巴科斯范式)来表示文法。
4.2 实现词法分析器词法分析器的主要任务是将输入的字符流转换为一个个的词法单元(token)。
词法单元是编程语言中的最小语法单位,例如关键字、标识符、常量等。
我们可以使用Lex工具来实现词法分析器,它可以根据我们定义的正则表达式规则来生成词法分析器的代码。
4.3 实现语法分析器语法分析器的主要任务是根据语言文法,将词法单元序列转换为语法树。
语法树是描述程序语法结构的一种树状数据结构,它可以帮助我们理解和处理程序的语义。
我们可以使用Yacc工具来实现语法分析器,它可以根据我们定义的文法规则来生成语法分析器的代码。
4.4 实现语义分析器语义分析器的主要任务是对语法树进行遍历和分析,检查程序中的语义错误并生成中间代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理实验学院 __________ 专业计算机科学与技术年级班别11 级计科7班学号3111 _____________________学生姓名 ______________________指导教师李小妹_________成绩________________________2014年1月一、实验目的与要求对PL/O作以下修改扩充:(1)增加单词:保留字ELSE , FOR , STEP , UNTIL , DO,RETURN运算符*=,/=,& ,||,!(2)修改单词:不等号#改为<>(3)增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义规则。
二、实验环境与工具1、源语言:PL/0语言,PL/0语言是PASCAL S言的子集,它的编译程序是一个编译解析执行系统,后缀名为PL0 ;2、目标语言:生成文件后缀为*.COD的目标代码3、实现平台:Borla nd C++Builder 64、运行平台:Win dowsXP三、设计方案1、结构设计说明(1)PL/0语言编译器PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。
PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。
PL/0 源程序(2)PL/0编译程序的语法分析过程BLOCK S整个编译过程的核心。
这里根据编译程序的总体流程图,来弄清BLOCK S程在整个编译程序中的作用。
总流程图如下图所示:PL/O的编译程序采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。
此外,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。
用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。
2、主要成分描述①符号表为了组成一条指令,编译程序必须知道其操作码及其参数(数或地址)。
这些值是由编译程序本身联系到相应标识符上去的。
这种联系是在处理常数、变量和过程说明完成的。
为此,标识符表应包含每一标识符所联系的属性;如果标识符被说明为常数,其属性值为常数值;如果标识符被说明成变量,其属性就是由层次和修正量(偏移量)组成的地址;如果标识符被说明为过程,其属性就是过程的入口地址及层次。
常数的值由程序正文提供,编译的任务就是确定存放该值的地址。
我们选择顺序分配变量和代码的方法;每遇到一个变量说明,就将数据单元的下标加一(PL/O机中,每个变量占一个存贮单元)。
开始编译一个过程时,要对数据单元的下标dx赋初值,表示新开辟一个数据区。
dx的初值为3,因为每个数据区包含三个内部变量RA DL和SL。
②运行时存储组织和管理对于源程序的每一个过程(包括主程序),在被调用时,首先在数据段中开辟三个空间,存放静态链SL、动态链DL和返回地址RA静态链记录了定义该过程的直接外过程(或主程序)运行时最新数据段的基地址。
动态链记录调用该过程前正在运行的过程的数据段基址。
返回地址记录了调用该过程时程序运行的断点位置。
对于主程序来说,SL、DL和RA的值均置为0。
静态链的功能是在一个子过程要引用它的直接或间接父过程(这里的父过程是按定义过程时的嵌套情况来定的,而不是按执行时的调用顺序定的)的变量时,可以通过静态链,跳过个数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它。
在过程返回时,解释程序通过返回地址恢复指令指针的值到调用前的地址,通过当前段基址恢复数据段分配指针,通过动态链恢复局部段基址指针。
实现子过程的返回。
对于主程序来说,解释程序会遇到返回地址为0的情况,这时就认为程序运行结束。
解释程序过程中的base函数的功能,就是用于沿着静态链,向前查找相差指定层数的局部数据段基址。
这在使用sto、lod、stoArr、lodArr等访问局部变量的指令中会经常用到。
类PCODE弋码解释执行的部分通过循环和简单的case判断不同的指令,做出相应的动作。
当遇到主程序中的返回指令时,指令指针会指到0位置,把这样一个条件作为终至循环的条件,保证程序运行可以正常的结束。
③ 语法分析方法语法分析子程序采用了自顶向下的递归子程序法, 语法分析同时也根据程序的语义生成相应三元代码,并提供了出错处理的机制。
语法分析主要由分程序分析过程 (BLOCK 、参数变量分析过程(ParaDeclaration、、参数变量处理过程( ParaGetSub 、、数组处理过程(ParaGetSub )、常量定义分析过程(ConstDeclaration)、变量定义分析过程(Vardeclaration 、、语句分析过程(Statement 、、表达式处理过程(Expression 、、项处理 过程(Term )、因子处理过程(Factor 、和条件处理过程(Condition 、构成。
这些过程在结 构上构成一个嵌套的层次结构。
除此之外,还有出错报告过程(Error 、、代码生成过程(Gen )、测试单词合法性及出错恢复过程(Test 、、登录名字表过程( Enter 、、查询名字表函数(Position 、以及列出类 PCODE 代码过程(Listcode 、作过语法分析的辅助过程。
中间代码表示目标代码类pcode 是一种假想栈式计算机的汇编语言四、测试用例1测试所有功能代码:PROGRAM EX01; VAR A,B,C; BEGIN A:=8; B:=5;IF A<>B THEN WRITE(A) ELSE WRITE(B); /=; &; ||;指令功能表!;・,FOR;STEP;UNTIL;RETURN;END. 截图:五、开发过程和完成情况1.增加单词:保留字ELSE ,FOR ,STEP ,UNTIL ,DO,RETURN 运算符*=,/=,& ,||,!增加 5 个保留字和 5 个运算符,合计10个单词。
其中保留字ELSE FOR TO, DOWNTORETURN分另U对应ELSESYM, FORSYM, STEPSYM, UNTILSYM, RETURNSYM,运算符*= ,/= ,& ,|| ,!对应TIMESBECOMES, SLASHBECOMES, ANDSYM, ORSYM, NOTSYM 增加保留字typedef enum { NUL, IDENT, NUMBER, PLUS, MINUS, TIMES,SLASH, ODDSYM, EQL, NEQ, LSS, LEQ, GTR, GEQ, LPAREN, RPAREN, COMMA,SEMICOLON, PERIOD, BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSYM,WHILESYM, WRITESYM, READSYM, DOSYM, CALLSYM, CONSTSYM, VARSYM,PROCSYM, PROGSYM,ELSESYM, FORSYM, STEPSYM, UNTILSYM, RETURNSYM, TIMESBECOMES, SLASHBECOMES, ANDSYM, ORSYM, NOTSYM } SYMBOL;char *SYMOUT[] = {"NUL", "IDENT", "NUMBER", "PLUS", "MINUS", "TIMES", "SLASH", "ODDSYM", "EQL", "NEQ", "LSS", "LEQ", "GTR", "GEQ", "LPAREN", "RPAREN", "COMMA","SEMICOLON", "PERIOD", "BECOMES", "BEGINSYM", "ENDSYM", "IFSYM", "THENSYM", "WHILESYM", "WRITESYM", "READSYM", "DOSYM", "CALLSYM", "CONSTSYM","VARSYM", "PROCSYM", "PROGSYM","ELSESYM","FORSYM","STEPSYM","UNTILSYM","RETURNSYM","TIMESBECOMES", "SLASHBECOMES", "ANDSYM", "ORSYM", "NOTSYM" };for (CH=' '; CH<='A'; CH++) SSYM[CH]=NUL;strcpy(KWORD[ 1],"BEGIN"); strcpy(KWORD[ 2],"CALL"); strcpy(KWORD[ 3],"CONST");strcpy(KWORD[ 4],"DO"); strcpy(KWORD[ 5],"ELSE"); strcpy(KWORD[ 6],"END");strcpy(KWORD[ 7],"FOR"); strcpy(KWORD[ 8],"IF");strcpy(KWORD[ 9],"ODD"); strcpy(KWORD[ 10],"PROCEDURE"); strcpy(KWORD[11],"PROGRAM"); strcpy(KWORD[12],"READ");strcpy(KWORD[13],"RETURN") ; strcpy(KWORD[14],"STEP"); strcpy(KWORD[15],"THEN");strcpy(KWORD[16],"UNTIL");strcpy(KWORD[17],"VAR"); strcpy(KWORD[18],"WHILE"); strcpy(KWORD[19],"WRITE");WSYM[ 1]=BEGINSYM; WSYM[ 2]=CALLSYM;WSYM[ 3]=CONSTSYM; WSYM[ 4]=DOSYM;WSYM[ 5]=ELSESYM; WSYM[ 6]=ENDSYM;WSYM[ 7]=FORSYM; WSYM[ 8]=IFSYM;WSYM[ 9]=ODDSYM; WSYM[10]=PROCSYM; WSYM[11]=PROGSYM; WSYM[12]=READSYM;WSYM[13]=RETURNSYM;WSYM[14]=STEPSYM;WSYM[15]=THENSYM; WSYM[16]=UNTILSYM;WSYM[17]=VARSYM; WSYM[18]=WHILESYM;WSYM[19]=WRITESYM;SSYM['+']=PLUS; SSYM['-']=MINUS;SSYM['*']=TIMES; SSYM['/']=SLASH;SSYM['(']=LPAREN; SSYM[')']=RPAREN;SSYM['=']=EQL; SSYM[',']=COMMA;SSYM['.']=PERIOD; 改单词:不等号#改为<>首先把源代码中的程序段SSYM['#']=NEQ;删除或注释消去。