实验1-3 《编译原理》词法分析程序设计方案
编译技术实验报告词法(3篇)

第1篇一、实验目的本次实验旨在通过实践加深对编译技术中词法分析阶段的理解,掌握词法分析的基本原理和方法,能够实现一个简单的词法分析器,并对源代码进行初步的符号化处理。
二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse IDE4. 实验素材:实验提供的C语言源代码三、实验原理词法分析是编译过程中的第一个阶段,其主要任务是将源代码中的字符序列转换成一系列的词法单元(Token)。
词法单元是构成源程序的基本单位,如标识符、关键字、运算符等。
词法分析的基本原理如下:1. 字符流:从源代码中逐个读取字符,形成字符流。
2. 状态转换:根据字符流中的字符,在有限状态自动机(FSM)中转换状态。
3. 词法单元生成:当状态转换完成后,生成对应的词法单元。
4. 错误处理:在分析过程中,如果遇到无法识别的字符或状态,进行错误处理。
四、实验步骤1. 设计词法分析器:根据C语言的语法规则,设计有限状态自动机,定义状态转换图。
2. 实现状态转换函数:根据状态转换图,实现状态转换函数,用于将字符流转换为词法单元。
3. 实现词法单元生成函数:根据状态转换结果,生成对应的词法单元。
4. 测试词法分析器:使用实验提供的C语言源代码,测试词法分析器的正确性。
五、实验结果与分析1. 词法分析器设计:根据C语言的语法规则,设计了一个包含26个状态的状态转换图。
状态转换图包括以下状态:- 初始状态:用于开始分析。
- 标识符状态:用于分析标识符。
- 关键字状态:用于分析关键字。
- 运算符状态:用于分析运算符。
- 数字状态:用于分析数字。
- 字符串状态:用于分析字符串。
- 错误状态:用于处理非法字符。
2. 状态转换函数实现:根据状态转换图,实现了状态转换函数。
该函数用于将字符流转换为词法单元。
3. 词法单元生成函数实现:根据状态转换结果,实现了词法单元生成函数。
该函数用于生成对应的词法单元。
编译原理实验:词法分析

} void main() {
p=0; printf("\n please input string :\n"); do{
ch=getchar(); prog[p++]=ch; }while(ch!='#'); p=0; do { scaner(); switch(syn) {
case 11 : printf("(%d,%d)",syn,sum); break;
case -1 : printf(" error \n"); break;
default: printf("(%d,%s)",syn,token); } }while (syn!=0); } (备注:代码可以运行) 5.实验感想 通过此次实验,学习到了扫描程序的算法思想和具体的源代码的编 写,成功设计,编写,并调试了一个词法分析程序,使我加深了对词法 分析原理的理解,编写程序的过程中也是对学过的c语言的相关知识的 复习,加强了使用c语言编程的熟练程度,一定程度上也提高了自己的 动手能力。
ch=prog[p++]; if(ch == '>') {
syn=21; token[m++] = ch; } else if(ch == '=') { syn=22; token[m++] = ch;
} else{
syn = 20; p--; } break; case '>': m=0;token[m++] = ch; ch=prog[p++]; if(ch == '=') { syn=24; token[m++] = ch; } else{ syn=24; p--; } break; case ':': m=0;token[m++] = ch; ch=prog[p++]; if(ch == '=') {
编译原理实验词法分析实验报告

编译原理实验词法分析实验报告一、实验目的词法分析是编译过程的第一个阶段,其主要任务是从左到右逐个字符地对源程序进行扫描,产生一个个单词符号。
本次实验的目的在于通过实践,深入理解词法分析的原理和方法,掌握如何使用程序设计语言实现词法分析器,提高对编译原理的综合应用能力。
二、实验环境本次实验使用的编程语言为_____,开发工具为_____。
三、实验原理词法分析的基本原理是根据编程语言的词法规则,将输入的字符流转换为单词符号序列。
单词符号通常包括关键字、标识符、常量、运算符和界符等。
词法分析器的实现方法有多种,常见的有状态转换图法和正则表达式法。
在本次实验中,我们采用了状态转换图法。
状态转换图是一种有向图,其中节点表示状态,有向边表示在当前状态下输入字符的可能转移。
通过定义不同的状态和转移规则,可以实现对各种单词符号的识别。
四、实验步骤1、定义单词符号的类别和编码首先,确定实验中要识别的单词符号种类,如关键字(if、else、while 等)、标识符、整数常量、浮点数常量、运算符(+、、、/等)和界符(括号、逗号等)。
为每个单词符号类别分配一个唯一的编码,以便后续处理。
2、设计状态转换图根据单词符号的词法规则,绘制状态转换图。
例如,对于标识符的识别,起始状态为“起始状态”,当输入为字母时进入“标识符中间状态”,在“标识符中间状态”中,若输入为字母或数字则继续保持该状态,直到遇到非字母数字字符时结束识别,确定为一个标识符。
3、编写词法分析程序根据状态转换图,使用所选编程语言实现词法分析器。
在程序中,通过不断读取输入字符,根据当前状态进行转移,并在适当的时候输出识别到的单词符号。
4、测试词法分析程序准备一组包含各种单词符号的测试用例。
将测试用例输入到词法分析程序中,检查输出的单词符号是否正确。
五、实验代码以下是本次实验中实现词法分析器的核心代码部分:```include <stdioh>include <ctypeh>//单词符号类别定义typedef enum {KEYWORD,IDENTIFIER,INTEGER_CONSTANT,FLOAT_CONSTANT,OPERATOR,DELIMITER} TokenType;//关键字列表char keywords ={"if","else","while","for","int","float","void"};//状态定义typedef enum {START,IN_IDENTIFIER,IN_INTEGER,IN_FLOAT,IN_OPERATOR} State;//词法分析函数TokenType getToken(char token, int tokenLength) {State state = START;int i = 0;while (1) {char c = getchar();switch (state) {case START:if (isalpha(c)){state = IN_IDENTIFIER;tokeni++= c;} else if (isdigit(c)){state = IN_INTEGER;tokeni++= c;} else if (c =='+'|| c ==''|| c ==''|| c =='/'|| c =='('|| c ==')'|| c ==';'|| c ==','){state = IN_OPERATOR;tokeni++= c;} else if (c ==''){state = IN_FLOAT;tokeni++= c;} else if (c == EOF) {tokeni ='\0';tokenLength = i;return -1;} else {tokeni ='\0';tokenLength = i;return -2;}break;case IN_IDENTIFIER:if (isalpha(c) || isdigit(c)){tokeni++= c;} else {ungetc(c, stdin);tokeni ='\0';tokenLength = i;//检查是否为关键字for (int j = 0; j < sizeof(keywords) / sizeof(keywords0); j++){if (strcmp(token, keywordsj) == 0) {return KEYWORD;}}return IDENTIFIER;}break;case IN_INTEGER:if (isdigit(c)){tokeni++= c;} else if (c ==''){state = IN_FLOAT;tokeni++= c;} else {ungetc(c, stdin);tokeni ='\0';tokenLength = i;return INTEGER_CONSTANT;}break;case IN_FLOAT:if (isdigit(c)){tokeni++= c;} else {ungetc(c, stdin);tokeni ='\0';tokenLength = i;return FLOAT_CONSTANT;}break;case IN_OPERATOR: tokeni ='\0';tokenLength = i;return OPERATOR; break;}}}int main(){char token100;int tokenLength;TokenType tokenType;while ((tokenType = getToken(token, &tokenLength))!=-1) {switch (tokenType) {case KEYWORD:printf("Keyword: %s\n", token);break;case IDENTIFIER:printf("Identifier: %s\n", token);break;case INTEGER_CONSTANT:printf("Integer Constant: %s\n", token);break;case FLOAT_CONSTANT:printf("Float Constant: %s\n", token);break;case OPERATOR:printf("Operator: %s\n", token);break;case DELIMITER:printf("Delimiter: %s\n", token);break;}}return 0;}```六、实验结果对准备的测试用例进行输入,得到的词法分析结果如下:测试用例 1:```int main(){int num = 10;float pi = 314;if (num > 5) {printf("Hello, World!\n");}}```词法分析结果:```Keyword: int Identifier: main Delimiter: (Delimiter: ){Identifier: num Operator: =Integer Constant: 10;Identifier: float Identifier: pi Operator: =Float Constant: 314;Keyword: ifDelimiter: (Identifier: numOperator: >Integer Constant: 5){Identifier: printfDelimiter: (String: "Hello, World!\n" Delimiter: );}```测试用例 2:```for (int i = 0; i < 10; i++){double result = i 25;```词法分析结果:```Keyword: for Delimiter: (Keyword: int Identifier: i Operator: =Integer Constant: 0;Identifier: i Operator: <Integer Constant: 10;Identifier: i Operator: ++)Identifier: doubleIdentifier: resultOperator: =Identifier: iOperator:Float Constant: 25;}```通过对多个测试用例的分析,词法分析器能够正确识别出各种单词符号,实验结果符合预期。
【实验报告】实验一-编写词法分析程序

编译原理实验报告实验名称:编写词法分析程序_______实验类型:设计型实验指导教师:专业班级:姓名:学号:实验地点:实验成绩:日期:2017年4月15日实验一编写语法分析程序一、实验目的1)通过设计、调试词法分析程序,掌握词法分析程序的设计工具,即有穷自动机,进一步理解自动机理论;2)掌握正则文法和正则表达式转换成有穷自动机的方法及有穷自动机的实现方法;3)会确定词法分析程序的输出形式及标识符与关键字的区分方法;4)加深对课堂教学的理解,提高词法分析方法的实践能力,掌握使用实验环境的技能技巧以及程序的调试方法。
二、实验设计1、写出TEST语言每条词法规则对应的正则文法或者正则表达式1)标识符:字母打头,后接任意字母或数字。
正则表达式:( a|b|……|z|A|B……|Z )( 0|1|……|9| a|b|……|z|A|B……|Z )*2)保留字:标符的子集,包括:if, else, for, while, do, int, write, read。
正则表达式:if | else | for | while | do | int | write | read3)无符号整数:由数字组成,但最高位不能为0,允许一位的0。
正则表达式:( (1……|9 )( 0|1|……|9)* )|04)分界符:(、)、;、{、}正则表达式:( | ) | ; | { | }5)运算符:+、-、*、/、=、<、>、>=、<=、!=、==正则表达式:+ | - | * | / | = | < | > | >= | <= | != | ==6)注释符:/* */正则表达式:/*(没有连续的*/的任意字符串|ℇ)*/2、对每个文法或者正则表达式分别构造NFA1)标识符:( a|b|……|z|A|B……|Z )( 0|1|……|9| a|b|……|z|A|B……|Z )*2)无符号整数:( (1|2|……|9 )( 0|1|……|9)* )|03)分界符:( | ) | ; | { | }4)运算符:+ | - | * | / | = | < | > | >= | <= | != | ==5)注释符:/*(没有连续的*/的任意字符串|ℇ)*/非*非*|非/3、将NFA合并,确定化,化简得到最终的DFA。
计算机编译原理实验报告

编译原理实验报告实验一词法分析设计一、实验功能:1、对输入的txt文件内的内容进行词法分析:2、由文件流输入test.txt中的内容,对文件中的各类字符进行词法分析3、打印出分析后的结果;二、程序结构描述:(源代码见附录)1、分别利用k[],s1[],s2[],s3[]构造关键字表,分界符表,算术运算符表和关系运算符表。
2、bool isletter(){} 用来判断其是否为字母,是则返回true,否则返回false;bool isdigit(){} 用来判断其是否为数字,是则返回true,否则返回false;bool iscalcu(){} 用来判断是否为算术运算符,是则返回true,否则返回false;bool reserve(string a[]){} 用来判断某字符是否在上述四个表中,是则返回true,否则返回false;void concat(){} 用来连接字符串;void getn(){} 用来读取字符;void getb(){} 用来对空格进行处理;void retract(){}某些必要的退格处理;int analysis(){} 对一个单词的单词种别进行具体判断;在主函数中用switch决定输出。
三、实验结果四、实验总结词法分析器一眼看上去很复杂,但深入的去做就会发现并没有一开始想象的那么困难。
对于一个字符的种别和类型可以用bool函数来判断,对于关键字和标示符的识别(尤其是3b)则费了一番功夫,最后对于常数的小数点问题处理更是麻烦。
另外,这个实验要设定好时候退格,否则将会导致字符漏读甚至造成字符重复读取。
我认为,这个实验在程序实现上大体不算困难,但在细节的处理上则需要好好地下功夫去想,否则最后的程序很可能会出现看上去没有问题,但实际上漏洞百出的状况。
将学过的知识应用到实际中并不简单,只有自己不断尝试将知识转化成程序才能避免眼高手低,对于知识的理解也必将更加深刻。
实验二LL(1)分析法一、实验原理:1、写出LL(1)分析法的思想:当一个文法满足LL(1)条件时,我们就可以为它构造一个不带回溯的自上而下的分析程序,这个分析程序是有一组递归过程组成的,每个过程对应文法的一个非终结符。
词法分析实验原理_编译原理实验报告范文分析

词法分析实验原理_编译原理实验报告范文分析1.实验目的根据Sample语言或者自定义的某种语言,设计该语言的编译前端。
包括词法分析,语法分析、语义分析及中间代码生成部分。
2.实验内容及要求(1)词法分析器输入源程序,输出对应的token表,符号表和词法错误信息。
按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误;(2)语法分析器输入token串,通过语法分析,寻找其中的语法错误。
要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、dowhile语句等。
(3)语义分析和中间代码生成输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生成中间代码。
要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、dowhile语句等。
实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。
3.实验方案设计3.1编译系统原理介绍编译器逐行扫描高级语言程序源程序,编译的过程如下:(1).词法分析识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。
(2).语法分析一个语句看作一串记号(Token)流,由语法分析器进行处理。
按照语言的文法检查判定是否是合乎语法的句子。
如果是合法句子就以内部格式保存,否则报错。
直至检查完整个程序。
(3).语义分析语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是否有重名或者使语义含糊的记号,等等。
编译课程方案词法分析程序(文政原创)

#include "string.h"#include "stdio.h"#include "ctype.h"#include "dos.h"#define SPACE 0#define LETTER 1#define DIGIT 2#define OTHER 3#define FOR 1000#define TO 1001#define DO 1002#define THEN 1003#define IF 1004#define ELSE 1005#define BEGIN 1006#define END 1007#define REPEAT 1008#define UNTIL 1009#define TRUE 1#define FALSE 0#define MAXANA 100/*输入字串的最大长度*/#define MAXRESVL 10/*保留字的最大长度*/#define MAXRESERVE 20 /*保留字个数*/typedef struct{char str[10]。
}lastwd。
/* 保留字标志符常数操作符界符 */ lastwdkeywd[MAXRESERVE],flagwd[20],intwd[20],oprwd[20],jief[20],errwd[20]。
int ckeywd=0,cflagwd=0,cintwd=0,coprwd=0,cjief=0,cerrwd=0。
/*计数*/int curpos=0。
/* 搜索串当前位置*//*声明函数*/char getachar(char *,int>。
/*此函数用于从字串*的int取一字符*/int analyse(char>。
/*此函数用于分析字符*/int analy(char *>。
/*此函数用于分析字串(关键字还是其他>*/int writefile(char *,char *>。
编译原理-实验报告1-词法分析

计算机硬件实验室实验报告姓名学号班级词法分析成绩设备名称及软件环境一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
(遇到错误时可显示“Error”,然后跳过错误部分继续显示)二、实验要求:识别保留字:if、int、for、while、do、return、break、continue,等C语言的保留字;单词种别码为1。
其他的都识别为标识符;单词种别码为2。
常数为无符号整形数;单词种别码为3。
运算符包括:+、-、*、/、=、>、<、>=、<=、!=;单词种别码为4。
分隔符包括:,、;、{、}、(、)、[、];单词种别码为5。
三、实验过程:根据题目要求,初步完成程序过程的设计,模块的划分、变量类型分配。
#inlclude<stdio.h>int main(){int d,a,c;a=10;c=a+b;printf("%d%d",a,b);;return 0;}用以上定义的C语言子集的源程序作为词法分析程序的输入数据。
在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表。
经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。
0.定义部分:定义常量、变量、数据结构。
1.初始化:从文件将源程序全部输入到字符缓冲区中。
2.取单词前:去掉多余空白。
3.取单词:利用实验一的成果读出单词的每一个字符,组成单词,分析类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1-3 《编译原理》S语言词法分析程序设计方案 一、实验目的 了解词法分析程序的两种设计方法之一:根据状态转换图直接编程的方式; 二、实验内容 1.根据状态转换图直接编程 编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如下图所示。
源程序 词法分析程序 二元式文件 具体任务有: (1)组织源程序的输入 (2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文件 (3)删除注释、空格和无用符号 (4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错误信息输出到屏幕上。 (5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则返回0并且填写符号表或常量表。 标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址 注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐步填入。 常量表结构:常量名,常量值
三、实验要求 1.能对任何S语言源程序进行分析 在运行词法分析程序时,应该用问答形式输入要被分析的S源语言程序的文件名,然后对该程序完成词法分析任务。 2.能检查并处理某些词法分析错误 词法分析程序能给出的错误信息包括:总的出错个数,每个错误所在的行号,错误的编号及错误信息。 本实验要求处理以下两种错误(编号分别为1,2): 1:非法字符:单词表中不存在的字符处理为非法字符,处理方式是删除该字符,给出错误信息,“某某字符非法”。 2:源程序文件结束而注释未结束。注释格式为:/* …… */ 四、保留字和特殊符号表 单词代码 1 2 3 4 5 6 7 8 9 单词 int char float void const for if else then 单词助记符 int char float void const for if else then
内码值 - - - - - - - - - 单词代码 10 11 12 13 14 15 16 17 18 单词 whilswitch break begiend 标识符 数字(包e n 括整数和实数) 单词助记符 while switch break begin end id num
内码值 - - - - - 在符号表中的位置 在常数表中的位置
单词代码 19 20 21 22 23 24 25 26 27 单词 + - * / % ( ) [ ] 单词助记符 + - * / % ( ) [ ]
内码值 - - - - - - - - - 单词代码 28 28 29 30 单词 != < > <= >= == ; { } 单词助记符 rlop ; { }
内码值 != < > <= >= == - - 单词代码 37 38 39 40 41 42 43 44 45 单词 /= += -= *= %= || && ! = 单词助记符 /= += -= *= %= or and not =
内码值 - - - - - - - - - 单词的构词规则: 字母=[A-Za-z] 数字=[0-9] 标识符=(字母|_)(字母|数字)* 数字=数字(数字)*(.数字+|?) 四、S语言表达式和语句说明 1.算术表达式:+、-、*、/、% 2.关系运算符:>、>=、<、<=、==、!= 3.赋值运算符:=,+=、-=、*=、/=、%= 4.变量说明:类型标识符 变量名表; 5.类型标识符:int char float 6.If语句:if 表达式then 语句 [else 语句] 7.For语句:for(表达式1;表达式2;表达式3) 语句 8.While语句:while 表达式 do 语句 9.S语言程序:由函数构成,函数不能嵌套定义。 函数格式为: 返回值 函数名(参数) { 数据说明 语句 } 五、程序参考结构说明
Scanner close
Isalpha Isnumber Isanotation Output Isother Error
主函数 Initscanner Lexscan
1.Initscanner函数:程序初始化:输入并打开源程序文件和目标程序文件,初始化保留字表 2.Scanner函数:若文件未结束,反复调用lexscan函数识别单词。 3.Lexscan函数:根据读入的单词的第一个字符确定调用不同的单词识别函数 4.Isalpha函数:识别保留字和标识符 5.Isnumber函数:识别整数,如有精力,可加入识别实数部分工功能 6.Isanotation函数:处理除号/和注释 7.Isother函数识别其他特殊字符 8.Output函数:输出单词的二元式到目标文件,输出格式(单词助记符,单词内码值),如(int,-)(rlop,>)…… 9.Error函数:输出错误信息到屏幕 10.除此之外,还可以设置查符号表,填写符号表等函数,学生可自行设计。 实验中,可以将某些类型的单词识别过程利用DFA算法实现,DFA算法参考如下: DFA(S=S0,MOVE[][],F[],ALPHABET[],ALLS[]) /*S为状态,初值为DFA的初态,MOVE[][]为状态转换矩阵,F[] 为终态集,ALPHABET[] 为字母表,其中的字母顺序与MOVE[][] 中列标题的字母顺序一致。ALLS[]为状态集*/ { Char Wordbuffer[10]=“” eySign,out); fputs(",",out); if(m==-1) fputs(Key[n].keyValue,out); else fputs(lownum[m],out);eyWord)==0) { Output(i,-1); return 0; } } eyWord)==0) { Output(i,-1); break; } } if(i==45)
2.设计词法分析器模块调用结构图和各模块流程图。 3.程序源代码。 4.程序的执行结果:输入文件,输出结果文件及屏幕信息。 四、实验中出现的问题及解决方法。 五、体会、意见或建议。
完成人:班级、学号、姓名 一、实验名称:简化S语言词法分析器 二、实验目的:通过手工编写简化C语言词法分析器,熟悉并深入理解编译程序词法分析器的工作原理。 三、实验内容: 1.根据保留字和特殊符号表能区分出源文件中的保留字、普通标识符和特殊符号,并能进行简单的错误处理。 ………… { num++; printf("\n第(%d)行 : 字符错误 : %s字符非法\n",n,token); } }
void Scanner() { char ch; int i; ch=getc(in); while(!feof(in)) { while(ch==' '||ch=='\t'||ch=='\n') //先统计行数 { if(ch=='\n') ++n; ch=getc(in); } if(((ch>='a')&&(ch<='z'))||(ch=='_'))//标识符 isalpha(ch)单词 { i=1; token[0]=ch; ch=getc(in); while(((ch>='a')&&(ch<='z'))||((ch>='0')&&(ch<='9')))//word number { token[i++]=ch; ch=getc(in); } token[i]='\0'; Isalpha(); } else if((ch>='0')&&(ch<='9'))//整数 { i=1; token[0]=ch; ch=getc(in); while(isdigit(ch)) { token[i++]=ch; ch=getc(in); } token[i]='\0'; Isnumber(); } else if(ch=='/')//区分 "/" , "/=" , "/*" { token[0]=ch; Isanotation(); ch=getc(in); } else //特殊字符 { token[0]=ch; Isother(); ch=getc(in); } } }
void show() { int i; char ch; printf("\n二元式:\n"); rewind(out); while(!feof(out)) { printf("%c",getc(out)); } printf("\n标志符表\n"); for(i=0;i{ if(Word[i][0]!=NULL) printf("%d,%s\n",i,Word[i]); } printf("\n常数表\n"); for(i=0;i{ if(consts[i][0]!=NULL) printf("%d,%s\n",i,consts[i]); } }
void main() { Initscanner(); Scanner();