编译原理----词法分析程序----C语言版

简介:
复制代码
#include<stdio.h>
#include< string.h>
#include<stdlib.h>
char KeyWord[ 20][ 100]={
     " begin ",
     " end ",
     " if ",
     " while ",
     " var ",
     " procedure ",
     " else ",
     " for ",
     " do ",
     " int ",
     " read ",
     " write "
};
char yunsuanfu[]= " +-*/<>%= ";
char fenjiefu[]= " ,;(){}: ";
int main()
{
     char test[]= " var a=10;\nvar b,c;\nprocedure p; \n\tbegin\n\t\tc=a+b\n\tend\n ";
     int len_yunsuanfu=strlen(yunsuanfu);
     int len_fenjiefu=strlen(fenjiefu);
    puts(test);
     int length=strlen(test),i,j,k;
     for(i= 0;i<length;i++)
    {
         if(test[i]== '   '||test[i]== ' \n '||test[i]== ' \t ')
             continue;
         int tag= 0;
         for(j= 0;j<len_fenjiefu;j++)
        {
             if(fenjiefu    [j]==test[i]){
                printf( " 分界符\t%c\n ",test[i]);
                tag= 1;
                 break;
            }
        }
         if(tag== 1)
             continue;
        tag= 0;
         for(j= 0;j<len_yunsuanfu;j++)
        {
             if(yunsuanfu[j]==test[i]){
                printf( " 运算符\t%c\n ",test[i]);
                tag= 1;
                 break;
            }
        }
         if(tag== 1)
             continue;
         if(test[i]>= ' 0 '&&test[i]<= ' 9 ')
        {
            printf( " 数字\t ");
             while(test[i]>= ' 0 '&&test[i]<= ' 9 ')
            {
                printf( " %c ",test[i]);
                i++;
            }
            printf( " \n ");
             continue;
        }
         char temp[ 100];
        j= 0;
         while(test[i]>= ' 0 '&&test[i]<= ' 9 '||test[i]>= ' a '&&test[i]<= ' z '||test[i]>= ' A '&&test[i]<= ' Z '||test[i]== ' _ ')
        {
            temp[j++]=test[i];
            i++;
        }
        i--;
        temp[j++]= ' \0 ';
        tag= 0;
         for(j= 0;j< 20;j++){
             if(strcmp(temp,KeyWord[j])== 0)
            {
                tag= 1;
                printf( " 关键字\t%s\n ",temp);
                 break;
            }
        }
         if(tag== 0)
            printf( " 标识符\t%s\n ",temp);
    }
}
复制代码

博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2012/03/20/2407364.html ,如需转载请自行联系原作者
相关文章
|
3月前
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
|
5月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
126 1
|
5月前
|
编译器 C语言 计算机视觉
C语言实现的图像处理程序
C语言实现的图像处理程序
253 0
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
91 5
|
2月前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
85 4
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
84 1
|
2月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
67 2
|
2月前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
58 1
|
3月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
4月前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
166 10

热门文章

最新文章