分享
 
 
 

从BRE 与 ERE的文法看两者的异同

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

关于BRE 和ERE,下面是Open Group公布的文法定义:

BRE and Bracket Expression Grammar

%token ORD_CHAR QUOTED_CHAR DUP_COUNT

%token BACKREF L_ANCHOR R_ANCHOR

%token Back_open_paren Back_close_paren

/* '\(' '\)' */

%token Back_open_brace Back_close_brace

/* '\{' '\}' */

/* The following tokens are for the Bracket Expression

grammar common to both REs and EREs. */

%token COLL_ELEM META_CHAR

%token Open_equal Equal_close Open_dot Dot_close Open_colon Colon_close

/* '[=' '=]' '[.' '.]' '[:' ':]' */

%token class_name

/* class_name is a keyword to the LC_CTYPE locale category */

/* (representing a character class) in the current locale */

/* and is only recognised between [: and :] */

%start basic_reg_exp

%%

/* --------------------------------------------

Basic Regular Expression

--------------------------------------------

*/

basic_reg_exp : RE_expression

| L_ANCHOR

| R_ANCHOR

| L_ANCHOR R_ANCHOR

| L_ANCHOR RE_expression

| RE_expression R_ANCHOR

| L_ANCHOR RE_expression R_ANCHOR

;

RE_expression : simple_RE

| RE_expression simple_RE

;

simple_RE : nondupl_RE

| nondupl_RE RE_dupl_symbol

;

nondupl_RE : one_character_RE

| Back_open_paren RE_expression Back_close_paren

| Back_open_paren Back_close_paren

| BACKREF

;

one_character_RE : ORD_CHAR

| QUOTED_CHAR

| '.'

| bracket_expression

;

RE_dupl_symbol : '*'

| Back_open_brace DUP_COUNT Back_close_brace

| Back_open_brace DUP_COUNT ',' Back_close_brace

| Back_open_brace DUP_COUNT ',' DUP_COUNT Back_close_brace

;

/* --------------------------------------------

Bracket Expression

-------------------------------------------

*/

bracket_expression : '[' matching_list ']'

| '[' nonmatching_list ']'

;

matching_list : bracket_list

;

nonmatching_list : '^' bracket_list

;

bracket_list : follow_list

| follow_list '-'

;

follow_list : expression_term

| follow_list expression_term

;

expression_term : single_expression

| range_expression

;

single_expression : end_range

| character_class

| equivalence_class

;

range_expression : start_range end_range

| start_range '-'

;

start_range : end_range '-'

;

end_range : COLL_ELEM

| collating_symbol

;

collating_symbol : Open_dot COLL_ELEM Dot_close

| Open_dot META_CHAR Dot_close

;

equivalence_class : Open_equal COLL_ELEM Equal_close

;

character_class : Open_colon class_name Colon_close

;

/* --------------------------------------------

Extended Regular Expression

--------------------------------------------

*/

extended_reg_exp : ERE_branch

| extended_reg_exp '|' ERE_branch

;

ERE_branch : ERE_expression

| ERE_branch ERE_expression

;

ERE_expression : one_character_ERE

| '^'

| '$'

| '(' extended_reg_exp ')'

| ERE_expression ERE_dupl_symbol

;

one_character_ERE : ORD_CHAR

| QUOTED_CHAR

| '.'

| bracket_expression

;

ERE_dupl_symbol : '*'

| '+'

| '?'

| '{' DUP_COUNT '}'

| '{' DUP_COUNT ',' '}'

| '{' DUP_COUNT ',' DUP_COUNT '}'

;

可以看出BRE和ERE的几点区别:

1.特殊字符不同(也即意味着除去特殊字符剩下的普通字符也不完全相同)

BRE:

.[\ 句点, 左括号和反斜线除了用在括号表达式中, 应当是特殊的. 表达式包含

'[', 而'['前面不带反斜线且不是括号表达式一部分时, 产生未定义的结果.

* 星号应当是特殊的, 除非当用于:

A) 括号表达式

B) 整个BRE的第一个字符(如果有开头的'^', 在其后)

C) 作为子表达式的第一个字符(如果有开头的'^', 在其后)

^ 抑扬符号当如下使用时应当是特殊的:

A)定位符(anchor)

B)括号表达式的第一个字符

$ 美元符号, 当用作定位符时是特殊的.

ERE:

.[\( 句点, 左括号, 反斜线, 和左圆括号当不用于括号表达式中时应当是特殊的.

在括号表达式外, 紧跟右圆括号的左圆括号产生未定义的结果.

) 无论在括号表达式内外, 当与前面的左圆括号匹配时, 右圆括号应当是特殊的.

*+?{ 星号, 加号, 问号, 和左大括号当不用于括号表达式中时应当是特殊的.

下面的任何用法产生未定义结果:

A) 如果这些字符出现在ERE的第一个, 或者紧跟竖线, 抑扬符, 或左

圆括号

B) 如果左大括号不是有效的间隔表达式的一部分

| 竖线符号应当是特殊的, 除非用于括号表达式中. 竖线符号出现在ERE的第一

个或最后, 或者紧跟竖线或左圆括号, 或在右圆括号前面, 将产生未定义的

结果.

^ 当用于下面情况时, 抑扬符应当是特殊的:

A) 定位符

B) 括号表达式的第一个字符

$ 当用作定位符时, 美元符应当是特殊的.

2.BRE可以使用向后引用

3.字符重复匹配次数语法不同(BRE:\{m,n\} ;ERE:{m,n} )

4.ERE可以使用组合()和交换|

但两者的括号表达式[]同样的

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有