社区
C语言
帖子详情
求一个词法程序
free1879
2005-12-20 04:53:52
词法分析难度太大,刚学编译原理!看看各位怎么写的...
...全文
135
2
打赏
收藏
求一个词法程序
词法分析难度太大,刚学编译原理!看看各位怎么写的...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
derekchuang
2005-12-21
打赏
举报
回复
/******************************************************************
*此程序只具备对简单的C语言程序的词法分析,不具备出错处理等高级功能*
*
*
*
*******************************************************************/
#include<stdio.h>
#include<string.h>
FILE *fp;
char ch; //存放最新读进的源程序字符
//将下一个输入字符读到ch中,搜索指示器前移一字符位置
GetChar(){
fscanf(fp,"%c",&ch);
}
//判断ch中的字符是否为空白
int IsEmpty(){
if(ch==' '||ch=='\t'||ch=='\n')
return 1;
else return 0;
}
//判断ch是否为字母
int IsLetter(){
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
return 1;
else return 0;
}
//判断ch是否为数字
int IsDigit(){
if(ch>='0'&&ch<='9')
return 1;
else return 0;
}
//判断ch是否为分隔符
int IsCompart(){
if(ch=='('||ch==')'||ch=='{'||ch=='}'||ch==','||ch==';'||ch=='"')
return 1;
else return 0;
}
//判断ch是否为运算符
int IsOperation(){
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='='||ch=='%'||ch=='<'||ch=='>')
return 1;
else return 0;
}
//是否为保留字
int IsKeyWord(char *c){
if(c=="int"||c=="for"||c=="if")
return 1;
else return 0;
}
//初始化单词符号字符串
Init(char *c){
int i;
for(i=0;i<10;i++)
c[i]='\0';
}
main(){
int i=0,j;
char strToken[10]; //存放构成单词符号的字符串
if((fp=fopen("E:\\编译原理\\a.txt","r"))==NULL){
printf("打开文件出错!\n" );
exit(1);
}
GetChar();
for(j=0;ch!='#';j++){
if(IsEmpty()){
while(IsEmpty()){
GetChar();
}
}
if(IsLetter()){
while(IsLetter()||IsDigit()){
strToken[i]=ch;
i++;
GetChar();
}
strToken[i]='\0';
if(IsKeyWord(strToken))
printf("<%s,保留字>\n",strToken);
else
printf("<%s,标识符>\n",strToken);
Init(strToken);
i=0;
}
if(IsCompart()){
while(IsCompart()){
printf("<%c,分隔符>\n",ch);
GetChar();
}
}
if(IsDigit()){
while(IsDigit()){
strToken[i]=ch;
i++;
GetChar();
}
strToken[i]='\0';
printf("%<s,数字>\n",strToken);
Init(strToken);
i=0;
}
if(IsOperation()){
while(IsOperation()){
strToken[i]=ch;
i++;
GetChar();
}
strToken[i]='\0';
printf("<%s,运算符>\n",strToken);
Init(strToken);
i=0;
}
}
getch();
fclose(fp);
}
sankt
2005-12-21
打赏
举报
回复
http://www.08090.com/c/sr/showart.asp?art_id=5&cat_id=2
http://www.qcode.org/article/qcode/code5/cj/cj4/200511/12392.html
其实这方面的例子很多,可以看看上面的参考一下
编译原理——设计
一个
词法
分析
程序
,实现对C
程序
设计语言的源
程序
(自定)的
词法
分析
本文介绍了
一个
词法
分析器的设计与实现过程,详细解释了如何使用正规文法和状态转换图识别C语言源
程序
中的单词,包括保留字、标识符、无符号整数、运算符和界符。同时,提供了完整的源代码和运行示例。
使用c语言编写
词法
分析
程序
,用C语言编写
一个
简单的
词法
分析
程序
这篇博客介绍如何使用C语言编写
一个
简单的
词法
分析
程序
,针对C语言小子集的源
程序
,根据预设的
词法
规则进行识别。
程序
包括关键字识别、数字和运算符的处理,并具备错误恢复功能。
程序
涉及的关键字、运算符和界符等
词法
规则被详细列出,以及
词法
分析的主要函数和辅助函数的实现。
设计
一个
简易的
词法
分析器
本文介绍了根据《
程序
设计语言编译原理》设计的
一个
简单
词法
分析器,能够识别关键字、标识符、数字,并忽略空格。关键功能包括预处理、超前搜索,涉及的主要变量和函数包括字符处理、字符串数组、关键字表等。虽然不完美,但提供了
词法
分析的基础框架。
实验1
词法
分析
程序
设计
本文介绍了
一个
使用C++在Clion环境下实现的一遍扫描
词法
分析
程序
,旨在理解
词法
分析在编译过程中的作用,深入有穷自动机模型,并掌握
词法
分析
程序
的实现方法。
程序
针对
一个
简单的语言子集,包括关键字、运算符、标识符和整数常量等,实现了
词法
分析并输出二元组。
Lex
词法
分析器
本文介绍了如何设计和实现
一个
简单的
词法
分析器,利用Lex进行编译。内容包括
词法
分析器的设计目的,实验步骤,以及如何定义规则识别保留字、常数、标识符、运算符和分界符。通过
词法
分析器,可以对源
程序
进行
词法
分析,输出单词符号的类别和属性信息。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章