天津建设银行网站首页,qq飞车哪个公司开发的,wordpress怎么去掉,公司宣传册怎么制作文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件#xff0c;复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验
实验预备知识… 文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验
实验预备知识
咱们先来分析一下实验到底想让我们干什么
flex是干什么的 flexFast Lexical Analyzer Generator是一个词法分析器生成工具用于自动生成词法分析器lexer/scanner的代码 输入flex 接收一个 .l或 .lex文件其中定义了词法规则正则表达式 动作。 输出生成一个 C 语言 的词法分析器通常是 lex.yy.c该代码可以识别输入流中的单词token。 用途主要用于编译器、解释器、文本处理工具等需要分词tokenization的场景。
flex 的基本工作原理
# flex 的工作流程
(1)编写 .l 文件定义词法规则正则表达式 对应的动作。
(2)运行 flex生成 lex.yy.c词法分析器代码。
(3)编译 lex.yy.c生成可执行程序用于分词。典型的.l文件
%{
/* C 代码如头文件、变量声明 */
#include stdio.h
%}/* 正则表达式定义 */
DIGIT [0-9]
LETTER [a-zA-Z]%%
/* 规则部分模式 动作 */
{DIGIT} { printf(Number: %s\n, yytext); }
{LETTER} { printf(Word: %s\n, yytext); }
[ \t\n] ; /* 忽略空白符 */
. { printf(Unknown: %s\n, yytext); }
%%/* 可选的 C 代码如 main 函数 */
int main() {yylex(); // 启动词法分析return 0;
}分析案例
实验名称识别输入文本中的单词word和数num并分别统计个数 实例.lex代码 %{
/* 全局变量声明部分C代码块 */
int wordCount 0; // 统计单词数量
int numCount 0; // 统计数字数量
%}/* 正则表达式定义部分 */
chars [A-Za-z\_\\.\] // 匹配字母、下划线、引号等字符
numbers ([0-9]) // 匹配一个或多个数字
delim [ \n\t] // 匹配空格、换行、制表符等分隔符
whitespace {delim} // 匹配一个或多个分隔符
words {chars} // 匹配一个或多个字符组合单词%%
/* 规则部分模式 动作 *//* 当匹配到while时打印该词 */
while { printf(%s\n, yytext); }/* 当匹配到单词时增加单词计数器 */
{words} { wordCount; // 单词数量加1
} /* 当匹配到空白符时不执行任何操作 */
{whitespace} { /* 空动作忽略空白字符 */
} /* 当匹配到数字时增加数字计数器 */
([0-9]) { numCount; // 数字数量加1
} %%
/* 用户自定义代码部分 *//* 主函数 */
void main() { printf(ok1\n); // 调试信息表示程序开始运行yylex(); // 启动词法分析printf(ok2\n); // 调试信息表示词法分析结束// 打印统计结果printf(No of words: %d\nNumber: %d\n, wordCount, numCount); return 0;
}/* 必须定义的yywrap函数当输入文件结束时调用 */
int yywrap() { return 1; // 返回1表示处理结束
} 测试的文本b.c asd asdf 23 q
a1
b2
!#
while程序的输出 ok1
!#while
ok2
No of words: 5number: 3简单分析一下输出结果
(1)这个ok1和ok2都是.lex程序中定义的输出
(2)其中!#是没哟被匹配到的所以会默认输出这个while的话.lex中规定了遇到while就输出
(3)统计结果
wordCount 5asd, asdf, q, a, b
numCount 323, 1, 2所要做的任务 说白了就需要你自己设计这个 a.lex 构词规则序列然后使用flex来生成词法生成程序lex.yy.c flex a.lex gcc -o a lex.yy.c -lfl 自己设计b.c程序然后使用lex.yy.c来分析b.c a.exe b.c a.txt 实战
当然是自己写啦