博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
词法分析
阅读量:6686 次
发布时间:2019-06-25

本文共 2123 字,大约阅读时间需要 7 分钟。

#include<stdio.h>

#include<string.h>
#include<ctype.h>
#define M 1000
struct 
key
{
    
char 
g[20];
};
typedef 
struct 
key KEY;
int 
main()
{
    
KEY k[6];
    
int 
i=0,j=0;
    
char 
a[M],b[M];
    
strcpy(k[0].g,
"begin"
);
    
strcpy(k[1].g,
"if"
);
    
strcpy(k[2].g,
"then"
);
    
strcpy(k[3].g,
"while"
);
    
strcpy(k[4].g,
"do"
);
    
strcpy(k[5].g,
"end"
);
 
    
printf(
"请输入源程序:\n"
);
    
gets(a);
    
while
(a[i]!=
'\0'
)
    
{
        
j=0;
        
if
((isalpha(a[i]))||(a[i]==
'_'
))
        
{
            
while
((a[i]!=
' '
)&&(a[i]!=
'\0'
))
            
{
                
if
((isalpha(a[i]))||(isdigit(a[i])))
                
{
                 
b[j]=a[i];
                 
j++;
                 
i++;
                
}
                
else
                    
break
;
            
}
            
if
((a[i]==
' '
)||(a[i]==
'\0'
))
            
{
                
b[j]=
'\0'
;
                
if
(strcmp(b,k[0].g)==0)
                    
printf(
"begin\t种别码   1\n"
);
                
else 
if
(strcmp(b,k[1].g)==0)
                    
printf(
"if   \t种别码   2\n"
);
                
else 
if
(strcmp(b,k[2].g)==0)
                    
printf(
"then \t种别码   3\n"
);
                
else 
if
(strcmp(b,k[3].g)==0)
                    
printf(
"while\t种别码   4\n"
);
                
else 
if
(strcmp(b,k[4].g)==0)
                    
printf(
"do   \t种别码   5\n"
);
                
else 
if
(strcmp(b,k[5].g)==0)
                    
printf(
"end  \t种别码   6\n"
);
                
else
                    
printf(
"%s  \t种别码   10\n"
,b);
            
}
            
else
            
{
                
b[j]=
'\0'
;
                
printf(
"%s   \t种别码       10\n"
,b);
                
i--;
            
}
        
}
 
        
else 
if
(isdigit(a[i]))
        
{
            
j=0;
            
while
(isdigit(a[i]))
            
{
                 
b[j]=a[i];
                 
j++;
                 
i++;
            
}
            
b[j]=
'\0'
;
            
printf(
"%s    \t种别码    11\n"
,b);
            
i--;
        
}
        
else
        
{
            
switch
(a[i])
            
{
            
case 
'+'
:
                
printf(
"%c   \t种别码   13\n"
,a[i]);
break
;
            
case 
'-'
:
                
printf(
"%c   \t种别码   14\n"
,a[i]);
break
;
            
case 
'*'
:
                
printf(
"%c   \t种别码   15\n"
,a[i]);
break
;
            
case 
'/'
:
                
printf(
"%c   \t种别码   16\n"
,a[i]);
break
;
            
case 
':'
:
                
if
(a[i+1]==
'='
)
                
{   printf(
":=   \t种别码   18\n"
);i++;
break
;}
                
else
                
{   printf(
"%c   \t种别码   17\n"
,a[i]);
break
;}
            
case 
'<'
:
                
if
(a[i+1]==
'='
)
                
{   printf(
"<=   \t种别码   21\n"
);i++;
break
;}
                
if
(a[i+1]==
'>'
)
                
{   printf(
"<>   \t种别码   22\n"
);i++;
break
;}
                
else
                    
printf(
"%c   \t种别码   20\n"
,a[i]);
break
;
            
case 
'>'
:
                
if
(a[i+1]==
'='
)
                
{   printf(
">=   \t种别码   24\n"
);i++;
break
;}
                
else
                    
printf(
"%c   \t种别码   23\n"
,a[i]);
break
;
            
case 
'='
:
                
printf(
"=    \t种别码    25\n"
);
break
;
            
case 
';'
:
                
printf(
";   \t种别码    26\n"
);
break
;
            
case 
'('
:
                
printf(
"(   \t种别码   27\n"
);
break
;
            
case 
')'
:
                
printf(
")   \t种别码   28\n"
);
break
;
            
case 
'#'
:
                
printf(
"#   \t种别码   0\n"
);
break
;
            
default
:
                
printf(
"%c   \t语法错误!\n"
,a[i]);
break
;
            
}
        
}
 
        
i++;
    
}
}
             

转载于:https://www.cnblogs.com/xiaoyy/p/4860696.html

你可能感兴趣的文章
python迭代器和生成器
查看>>
Android 2.3预计下周发布 十大惊“.NET研究”喜不容错过
查看>>
艾伟:WCF从理论到实践(15):响应变化
查看>>
艾伟也谈项目管理,项目经理的思维批判
查看>>
一起谈.NET技术,Sharepoint 究竟能为客户做些什么
查看>>
解决ftp登录问题:500 OOPS: cannot change directory:/home/xxx 500 OOPS: child died
查看>>
使用IEDScout校验61850出错记录及解决方案
查看>>
AD在更新PCB的时候,每次封装都会改变位置?
查看>>
Delphi启动外部程序
查看>>
python操作mysql总结
查看>>
JavaScript学习-自定义对象属性迭代器
查看>>
查看java源码显示source not found
查看>>
Linux常用经典命令
查看>>
命令行参数及全局替换程序
查看>>
Android Studio 快捷键
查看>>
hive的函数
查看>>
【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
查看>>
cocos2d游戏 如何显示分数 分数变化
查看>>
OD命令
查看>>
GNU C相关
查看>>