分享
 
 
 

Flex2.5用户手册(三)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Flex2.5用户手册(三)

Flex可识别的输入文件格式(用于描述要生成的扫描器)

Flex的输入文件包括如下的三个部分,通过%%分隔开,如下所示:

定义

%%

规则

%%

用户代码

定义段包括简单的名字声明,和为简化扫描器的描述而进行的宏定义,还有起始条件的声明,关于起始条件稍后将介绍。

定义名称的形式如下:

名称 定义

名称是以字母或下划线’_’开始,后跟零个或多个字母、数字、_或者-(dash)。定义部分整体做为一个记号(token),从名称后的首个非空字符开始一直到该行的结束都是定义部分。

随后,就可通过名称来引用定义(definition)。例如:

DIGIT [0-9]

ID [a-z][a-z0-9]*

"DIGIT"被定义为一个正则表达式,该表达式可以匹配单个数字,"ID"也代表一个正规表达式,它可匹配这样的字符串:“以字母开头,随后为零个或多个字母和数字的组合”。

通过名字来引用:

{DIGIT}+"."{DIGIT}*

上述表达式和下面的完全等价

([0-9])+"."([0-9])*

上式可匹配这样的字符串:“小数点前有一个或多个数字,小数点后有零个或多个数字”。

规则段中的规则定义采用如下形式:

模式 动作

模式必须顶头开始写,不能有空格,并且动作必须从同一行开始。后面,我们在进一步讨论模式和动作,这里先简单介绍一下。

最后,用户代码段的内容将被直接复制到’lex.yy.c’,做为扫描器的子程序来使用。该段是可选的;如果没有提供该段,那么第二个’%%’将被跳过。

位于定义段和规则段的任何文字以及位于’%{’和’%}’中内容都会被复制到输出中。

在规则段,出现在第一条规则之前的任何行或包含于%{}中的文字可以用于声明在扫描器例程中使用的局部变量和代码,只要进入扫描器例程就会执行这些代码。位于规则段的其它的多行或者%{}中的文字将被复制到lex.yy.c中,但是这种定义并不是很明确,可能会引起编译时错误(这种特性是为了符合POSIX规范,下面将讨论其他特性)。

在定义段,单行注释(例如,以"/*"开头的一行)将被直接复制到lex.yy.c中。(注意:在规则段不会遵循上述规定。)

模式(Patterns)

模式是对正则表达式的扩展,如下:

`x'

匹配字符’x’

`.'

除换行之外的任何字符(字节)。

`[xyz]'

说明了一个“字符类”;此时,模式匹配`x'、`y'或`z'中的任何一个。

`[abj-oZ]'

带有范围的“字符类”;匹配’a’、’b’,’j’到’o’之间的任何字母,或者’Z’。

`[^A-Z]'

“非字符类”(negated character class),可匹配除“非字符类”中声明的字符以外的所有字符,本例中,匹配除大写字母外的所有任何字符。

`[^A-Z\n]'

除大写字母和换行外的任何字符。

`r*'

零个或多个r,r可以是任意的正则表达式。

`r+'

一个或多个r

`r?'

零个或一个r

`r{2,5}'

2到5个r

`r{2,}'

2到无穷个r

`r{4}'

匹配恰好4个r

`{name}'

此处将按照前面关于"name"的定义进行展开。(see above)

`"[xyz]\"foo"'

将foo按照字面意思匹配,等同于:`[xyz]"foo',’\’ 为转义符号

`\x'

如果x是`a',`b',`f',`n',`r',`t',或者`v',那么\x将被解释为ANSIC-C字符,否则,将按字面意思解释`x'(该形式用于转义像`*'这样的操作符)

`\0'

a NUL character (ASCII code 0)

`\123'

以八进制数123表示的字符

`\x2a'

以十六进制数2a表示的字符

`(r)'

匹配一个r;圆括号用于改变原有字符的优先级(see below)

`rs'

在正则表式r之后匹配正则表达式s;这种方式称为:“连接”

`r|s'

表示匹配正则表达式r或者正则表达式s

`r/s'

表示仅当s被匹配时,才匹配r。'/'本身不匹配任何字符,当需要确定那个规则是最长匹配时,由s匹配的文本将被包括进来,需要注意的是,在动作(action)被执行之前,由s匹配的文本将被退回到输入缓冲区中。因此,在执行动作时仅能看到匹配r的文本(译注:这意味着yytext将不包含匹配s的字符,而且它们也不会记入yyleng中)。这种类型的模式称为右上下文模式(trailing context)。(flex不能正确识别某些`r/s'的组合;请参看后面的“flex的不足之处和它的Bugs”一节,那里将讨论“右上下文的危险性”)

`^r'

仅在行首位置匹配r(即扫描开始的位置,或者扫描到一个换行符之后)。(译注:'^'不匹配任何字符,有时,我们也将此种模式称为左上下文模式)

<待续>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有