资源简介
递归下降语法分析程序的范例代码...实验内容及操作示范详见实验指导书...

代码片段和文件信息
#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
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 递归下降分析器分析普通的四则运算
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- LL(1)文法的递归下降分析程序例题
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- pl/0编译器 语法分析
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- TINY+编译器 改编自原版TINY
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
评论
共有 条评论