社区
C语言
帖子详情
求一个词法程序
free1879
2005-12-20 04:53:52
词法分析难度太大,刚学编译原理!看看各位怎么写的...
...全文
121
2
打赏
收藏
求一个词法程序
词法分析难度太大,刚学编译原理!看看各位怎么写的...
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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语言的
词法
分析,关键字32个,包含了C的绝大部分运算、限界符,主要是对文件进行读、写操作,节省内存消耗,自以为是
一个
不错的
词法
分析
程序
。运行环境为VC++6.0。
编译原理实验报告 语法分析 语义分析
词法
分析 详细的源
程序
编制
一个
递归下降分析
程序
,实现对
词法
分析
程序
所提供的单词序列的语法检查和结构分析. C2.2 实验要
求
利用C语言编制递归下降分析
程序
,并对简单语言进行语法分析. C2.2.1待分析的简单语言的语法 实验目的 通过上机...
java
词法
分析器源代码
在这个特定的“java
词法
分析器源代码”压缩包中,可能包含的是
一个
实现了
词法
分析功能的Java项目,名为"SynEdit"。
词法
分析器通常由两部分组成:
词法
规则定义和
词法
分析算法。在Java中,
词法
分析器可以使用各种...
java
词法
分析器源码
这个是java
词法
分析器,包含全部的源码,我以前提交的只有一些源代码,不好意思。和其他的
词法
分析器不同,这个包含了图形模拟功能。... 这个
程序
是在linux中写的,所以readme文件需要大家改下。 谢谢了。
编译原理课程设计报告
词法
分析器的主要职责是从左至右扫描源
程序
的字符串,根据预定义的
词法
规则(如正则表达式)识别出
一个
个正确的单词,并将其转换成相应的二元式(种别码和属性值),然后传递给语法分析器进一步处理。 ##### 2.2 ...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章