- 82
- 0
- 约2.03万字
- 约 29页
- 2018-01-15 发布于浙江
- 举报
FLEX 中文手册
一些简单的例子
输入文件的格式
模式
如何匹配输入
动作
生成的扫描器
开始条件
文件结尾规则
与 yacc 一起使用
一、一些简单的例子
首先给出一些简单的例子,来了解一下如何使用 flex 。下面的flex 输入所定
义的扫描器,用来将所有的“
username”字符串替换为用户的登陆名字:
%% username printf(%s, getlogin());
默认情况下,flex 扫描器无法匹配的所有文本将被复制到输出,所以该扫描
器的实际效果是将输入文件
复制到输出,并对每一个“username”进行展开。在这个例子中,只有一个规
则。“username”是模式
(pattern),“printf”是动作(action )。“%%”标志着规则的开始。
这里是另一个简单的例子:
int num_lines = 0, num_chars = 0;
%% \n ++num_lines; ++num_chars; . ++num_chars;
%% int main(void)
{
yylex();
printf(# of lines = %d, # of chars = %d\n, num_lines, num_chars);
}
该扫描器计算输入的字符个数和行数(除了最后的计数报告,并未产生其它
输出)。第一行声明了两
个全局变量,“num_lines”和“num_chars”,可以在 yylex() 函数中和第二个
“%%”后面声明的 main()函数中
使用。有两个规则,一个是匹配换行符(“\n”)并增加行数和字符数,另一个
是匹配所有不是换行符的
其它字符(由正规表达式“.”表示)。
一个稍微复杂点的例子:
/* scanner for a toy Pascal-like language */
%{
/* need this for the call to atof() below */
#include math.h
%}
DIGIT [0-9] ID [a-z][a-z0-9]*
%%
{DIGIT}+ {
printf( An integer: %s (%d)\n, yytext,
atoi( yytext ) );
}
{DIGIT}+.{DIGIT}* {
printf( A float: %s (%g)\n, yytext,
atof( yytext ) );
}
if|then|begin|end|procedure|function {
printf( A keyword: %s\n, yytext );
}
{ID} printf( An identifier: %s\n, yytext );
+|-|*|/ printf( An operator: %s\n, yytext );
{[^}\n]*} /* eat up one-line comments */
[ \t\n]+ /* eat up whitespace */
. printf( Unrecognized character: %s\n, yytext );
%%
int main(int argc, char **argv)
{
++argv, --argc; /* skip over program name */
if ( argc 0 )
yyin = fopen( argv[0], r );
else
yyin = stdin;
yylex();
}
这是一个类似 Pascal 语言的简单扫描器的初始部分,用来识别不同类型的标
志(tokens )并给出报告。
这个例子的详细介绍将在后面的章节中给出。
二、输入文件的格式
flex 输入文件包括三个部分,通过“%%”行来分开:
definitions (定义)%% rules (规则)%% user code (用户代码)
您可能关注的文档
- 医学细胞生物学(中山大学)第四章 第一节细胞膜的化学组成与生物学特性.doc
- 医学细胞生物学(中山大学)第二章 细胞的概念和分子基础(附习题).docx
- 医学细胞生物学(中山大学)第五章 细胞的内膜系统与囊泡运输.docx
- 医学细胞生物学(中山大学)12 信号转导-五年制.pptx
- 医学细胞生物学(中山大学)柯琼 核糖体-20141027.pptx
- 医学细胞生物学(中山大学)柯琼 第6章细胞骨架与细胞运动-20150408.pptx
- 医学英语教学(盛淑芳)Introduction.ppt
- 医学英语教学(盛淑芳)Unit 1.ppt
- 医学细胞生物学(中山大学)细胞分化-五年制.ppt
- 医学英语教学(盛淑芳)unit 3.ppt
最近下载
- 2025年陕西省中考数学真题试卷含答案.pdf VIP
- 一年级英语寒假作业.pdf VIP
- 微生物技术 走进微生物世界 微生物技术—走进微生物世界.pptx VIP
- 《植物组织培养》课程教学大纲(本科).pdf VIP
- 2025年重庆市公务员省考《行测》联考真题(含答案).pdf VIP
- 2026年一年级英语【寒假作业】.docx VIP
- 抽象函数的单调性.doc VIP
- 2025年重庆市公务员考试行测真题及答案详解(最新).docx VIP
- 2025年特许金融分析师私募股权投资中的公司尽职调查专题试卷及解析.pdf VIP
- 2025年金融风险管理师久期与债券流动性风险的交互影响专题试卷及解析.pdf VIP
原创力文档

文档评论(0)