资源简介
用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。
代码片段和文件信息
/////***************************词法分析程序***********************************///
#include
#include
#include
#include
////*******************************************************************************////
char *rwtab[35]={“main““printf““scanf““else““if““auto““double““int““struct“
“break““long““switch““case““enum““register““typedef““char“
“extern““return““union““const““float““short““unsigned““continue“
“for““signed““void““default““goto““sizeof““volatile““do““while““static“};/*关键字定义*/
char prog[300]={‘\0‘};/*缓冲区*/
char ch;
int p; /*p是缓冲区prog的指针*/
////****************************关键字匹配函数************************************////
int checkup(char *Token){
int i;
for(i=0;i<35;i++)
if(strcmp(Tokenrwtab[i])==0)
return 1;
return 0;
}
////****************************输出函数****************************************////
void output(int kchar *Token)
{
switch(k)
{
case 0:printf(“判断符:%s\t“Token);break;
case 1:printf(“运算符:%s\t“Token);break;
case 2:printf(“分隔符:%s\t“Token);break;
case 3:printf(“占位符:%s\t“Token);break;
case 4:printf(“不识别:%s\t“Token);break;
case 5:printf(“不合法:%s\t“Token);break;
case 6:printf(“标识符:%s\t“Token);break;
case 7:printf(“关键字:%s\t“Token);break;
case 8:printf(“常数:%s\t\t“Token);break;
case 9:printf(“kong\t“);break;
}
}
////*****************************扫描函数****************************************////
void scaner()
{
int m=0; /*m是token的指针*/
char token[12]={‘\0‘}; /*存放构成单词符号的字符串*/
int flag=1; /*标记是否为合法标志符*/
ch=prog[p++];
while(ch==‘ ‘||ch==‘\n‘) /*屏蔽掉空格和换行*/
ch=prog[p++];
if(isalpha(ch)) /*字符串首部为字母字符时*/
{
while(isalnum(ch)) /*判断字符串第二个为字母或数字*/
{
token[m++]=ch;
ch=prog[p++];
}
p--;
if(checkup(token)==1) output(7token);/*关键字输出*/
else output(6token); /*标识符输出*/
}
else
if(isdigit(ch)) /*ch是数字字符*/
{
while(isdigit(ch)) /*ch是数字字符*/
{
token[m++]=ch;
ch=prog[p++];
}
while(isalpha(ch)) /*若字符串是以数字开头的标识符则不合法*/
{
token[m++]=ch;
ch=prog[p++];
flag=0;
}
p--;
if(flag==0) output(5token);/*不合法标识符输出*/
else output(8token); /*常数输出*/
}
else
switch(ch){
- 上一篇:sift-surf-orb通用程序
- 下一篇:计算机图形学基础—消隐
相关资源
- 编译原理课设--词法分析、语法和语义
- 词法分析器C语言编写附实验报告
- 编译原理课程设计之编译器
- 类C语言的词法分析程序基于C语言
- 编译原理-语义分析器C语言源码
- 小型编译器的设计C语言实现
- 算符优先分析法 C++ 编译原理
- 编译原理综合性实验
- 编译原理_递归下降分析语法分析_C语
- PL)词法分析程序C语言版
- 编译原理 四元式的生成
- 编译原理课程设计:算符优先分析
- 编译原理实验c++实现LR(1)语法分析
- 一个Lex/Yacc完整的(可使用C++)
- PL/0编译程序(c语言版本)
- 编译原理三地址代码生成C++实现
- 编译原理实习 C语言小子程序 南京工
- 编译原理消除无用产生式的文法化简
- 状态转换图c语言编译原理
- 编译原理课程设计含報告
- LL(1)文法求First和Follow集合
- 将字符串转为二元组编译原理
- 软件学院编译原理第二次上机求firs
- 逆波兰表达式 c语言实现
- 编译原理实验 DFA的最小化 c++代码
- 编译原理课程设计广工C语言
- 编译原理课程设计——算术表达式、
- 广工编译原理课程设计 PL0C++改进需用
- 0513《编译原理》答案 设计并实现TI
- 编译原理firstselectfollow实验源代码
评论
共有 条评论