资源简介
用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编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 词法分析器有去除注释功能
- 自定义词法规则的词法分析器
- 简单函数绘图语言的解释器
- C语言词法分析程序
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析C++源码
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
评论
共有 条评论