词法分析程序统计字符和行数

利用lex的工具进行词法分析程序统计字符和行数,首先我们要先去写一个lex描述文件,设置辅助定义部分,规则部分和用户子程序部分,其中lex工具是一个词法分析程序的自动构造工具

lex描述文件部分如下所示

%{
    int num_lines=0,num_chars=0;
%}
%%
\n {++num_lines;++num_chars;}
. {++num_chars;}
%%
main(){
    yylex();
    printf("# of lines=%d,#of chars=%d\n",num_lines,num_chars);
}
  • 然后我们打算用命令行输入lex count.l命令,其中count.l是lex的描述文件名,然后会生成一个lex.yy.c文件
  • 然后我们输入cc -o count lex.yy.c -ll命令,其实这里就是再去利用编译器clang(只是终端命令使用了cc,但其实这只是一个链接指向的是clang编译器)去对lex.yy.c进行编译,选项-o count指令了可执行文件名为count,不指定默认为a.out,-ll是lex库文件的选项,其中,-ll表示链接lex的相关库文件,要想编译时不带-ll选项,就必须实现main函数和yywrap函数(return 1即可)。
  • 之后我们就去指向这个可执行文件,使用./count < count.l 其中输入的参数就是count.l的文本,执行结果是输出文件count.l中文本的行数和字符数

执行结果如下所示

这里写图片描述

如果我们自己去创建了一个abc.c文件,然后我们通过这个构造的词法分析程序去分析其的字符数和换行数的话结果如下所示

首先我们看下我们abc.c文件的内容

这里写图片描述

输出结果如下所示

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此资源包含源代码和实验报告。 一、实验目的 设计、编制、调试一个词法分析程序-识别单词,加深对词法分析原理的理解。通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。 二、实验要求 该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即关键字、标识符、数据、运算符、分界符等五大类,并依次输出各个单词的种类及单词符号自身值。若遇到错误则显示“Error”,然后跳过错误部分继续显示 。 三、实验内容 通过输入源程序从左到右对字符串进扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示。 以下是实现词法分析设计的主要工作: (1)从源程序文件中读入字符。 (2)删除空格类字符,包括回车、制表符空格。 (3)按拼写单词,并用(单词,属性)二元式表示。 (4)如果发现错误则报告出错。 单词的基本分类: 关键字:由程序语言定义的具有固定意义的标识符。也称为保留字例如 i f、const; 单词种别码为1。 标识符:用以表示各种名字,如变量名、数组名、函数名;种别码为2。 数据: 任何数值常数。如 125,3.14等;种别码为3。 运算符:+、-、*、/、<、、>=、;种别码为4。 分界符: ; 、, 、(、) 、[、];种别码为5。 Error:#、%等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值