资源简介
递归下降语法分析程序的范例代码...实验内容及操作示范详见实验指导书...
代码片段和文件信息
#include “stdio.h“
#include “string.h“
#include “stdlib.h“
#include “conio.h“
/*关键字表每个关键字的种别码为其下标值+1*/
char *keywords[33]=
{“and““array““begin““bool““call““case““char““constant““do““else““end““false“
“for““if““input““integer““not““of““or““output““procedure““program““read“
“real“ “repeat““set““then““to““true““until““var““while““write“ };
/*运算符与界符表,每个符号的种别码为其下标值+38*/
char *opts[]=
{“‘““(““)““*““+““““-““/““:““:=““;““<““<=““<>““=““>““>=““[““]“};
/*标识符种别码*/
#define identsys 34
/*整型常量种别码*/
#define intcontsys 35
/*实型常量种别码*/
#define realcontsys 36
/*字符常量种别码*/
#define charconsys 37
typedef struct
{ char name[20];
int kind;
int type;
} idtype; /*标识符表的元素类型*/
typedef struct
{ idtype idwords[200];
int len;
} idTtype;/*标识符表类型*/
idTtype idtable; /*定义标识符表*/
typedef struct
{ int intcons[200];
int len;
} intconTtype; /*整型常量表类型*/
intconTtype intcontable; /*定义整型常量表*/
/*实型常量表略*/
typedef struct
{char charcons[200];
int len;
} charconTtype; /*字符常量表类型*/
charconTtype charcontable; /*定义字符常量表*/
typedef struct
{ int kind;
int entry;
}tokentype; /*Token字类型*/
tokentype tokens[100];/*Token字表*/
void wordcat(char *wordchar ch) /*单词连接函数,将字符ch连接在word之后*/
{ char *s=word;
while(*s) s++;
*s=ch;*(++s)=‘\0‘;
}
void clearword(char *word) /*将word清空*/
{ *word=‘\0‘;}
int iskeyword(char *word) /*判断单词word是否为保留字,若是返回其种别码,否则返回0*/
{ int i;
for(i=0;i<=30;i++)
if (strcmp(wordkeywords[i])==0) return i+1;
return 0;
}
int operater(char *word) /*判断单词word是否为操作符,若是返回其种别码,否则返回0*/
{ int i;
for(i=0; i<21; i++)
if(strcmp(wordopts[i])==0) return i+38;
return 0;
}
int lookupid(char *word) /*查填标识符表*/
{ int i;
for(i=0;i if(strcmp(wordidtable.idwords[i].name)==0) return i;
strcpy(idtable.idwords[idtable.len].nameword);
return (idtable.len)++;
}
void scanner(FILE *fp1)
{ int len=0; /*Token字表初始为空*/
int kindentry;
char word[30]=““chch1;
idtable.len=0;
intcontable.len=0;
charcontable.len=0;
ch=fgetc(fp1);
while(ch!=EOF)
{ while(ch==‘ ‘||ch==‘\n‘) ch=fgetc(fp1);/*滤除空格或回车符*/
if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘) /*处理标识符与保留字*/
{ wordcat(wordch); ch=fgetc(fp1);
while(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘||ch>=‘0‘&&ch<=‘9‘)
{ wordcat(wordch); ch=fgetc(fp1); }
kind=iskeyword(word);
if(kind) /*为保留字*/
{ tokens[len].kind=kind; tokens[len].entry=0;len++;}
else{ entry=lookupid(word); tokens[len].kind=identsys;
tokens[len].entry=entry;len++;}
clearword(word);
}
else if(ch==‘:‘) /*处理界限符“:“与操作符“:=“*/
{ wordcat(wordch);
ch=fgetc(fp1);
if(ch!=‘=‘)
{ kind=operater(word); tokens[len].kind=kind;
tokens[len].entry=0; len++; }
else { wordcat(wordch); kind=operater(word); tokens[len].kind=kind;
len++;tokens[len].entry=0; ch=fgetc(fp1); }
clearword(word);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 168010 2001-01-08 02:26 Recursive descent parser\Debug\text2.exe
文件 206916 2001-01-08 02:26 Recursive descent parser\Debug\text2.ilk
文件 34003 2001-01-08 02:26 Recursive descent parser\Debug\text2.obj
文件 224512 2001-01-08 02:26 Recursive descent parser\Debug\text2.pch
文件 459776 2001-01-08 02:26 Recursive descent parser\Debug\text2.pdb
文件 33792 2001-01-08 02:26 Recursive descent parser\Debug\vc60.idb
文件 53248 2001-01-08 02:26 Recursive descent parser\Debug\vc60.pdb
文件 243 2001-01-08 02:21 Recursive descent parser\pro2.txt
文件 9997 2001-01-08 02:22 Recursive descent parser\text2.cpp
文件 3389 2001-01-08 02:26 Recursive descent parser\text2.dsp
文件 535 2001-01-08 02:38 Recursive descent parser\text2.dsw
文件 41984 2001-01-08 02:38 Recursive descent parser\text2.ncb
文件 48640 2001-01-08 02:38 Recursive descent parser\text2.opt
文件 1123 2001-01-08 02:26 Recursive descent parser\text2.plg
文件 9997 2001-01-08 02:19 Recursive descent parser\text2.txt
目录 0 2001-01-08 02:13 Recursive descent parser\Debug
目录 0 2001-01-08 02:13 Recursive descent parser
----------- --------- ---------- ----- ----
1296165 17
相关资源
- 编译原理LALR(1)文法分析器
- 语法分析器_编译原理_带报告
- 实验三 LL1语法分析器设计
- PL0词法语法分析器225358
- 编译原理中VC实现语法分析器
- 语法分析器 算符优先 编译原理实验
- 算符优先分析算法的设计与实现 编译
- 赋值语句语法分析
- 编译原理课设——算符优先分析程序
- 编译原理课程设计计软张芃教小子集
- 实验二 实现一门语言的词法分析器
- 编译原理课程设计报告_算符优先分析
- 编译原理 语法分析、语义分析综合实
- 编译原理SLR1分析
- 哈工大软件学院编译原理语法分析源
- 基于Pascal语言的语法分析器
- 2013集美大学编译原理部分考试题目
- 词法分析、语法分析、语义分析
- 编译原理词法、语法、语义分析器
- 词法分析语法分析语义分析
- 递归下降分析程序 很好的实验要求
- 算术表达式的语法分析及语义分析程
- 编译原理词法分析程序代码
- 湖南农大-编译原理2010期末考试试卷
- 编译原理实验 语义分析与中间代码
- 编译原理 语法分析器
- 编译原理目标代码
- 无符号数的词法分析程序
- 编译原理实验代码四则表达式编译及
- 西安电子科技大学编译原理大作业C
评论
共有 条评论