Flex规则中的选择符号`|`带来的不匹配问题

本文介绍了Flex规则中关于选择符号的使用误区,强调了选择符号必须紧跟匹配内容。错误案例包括换行符的误用导致匹配失败。正确的做法是在同一行内书写规则和语义值,或者在选择符号前后添加空格和换行符。提供了解决这类问题的正确示例,建议多加练习以避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎样的使用选择|是错误的

由Flex规则定义如下:

选择符号应该匹配仅跟在前面的表达式,或者紧跟在后面的表达式 (其实后面还有一个可选的书写方式,后文会提到)

这里面比较重要的是紧跟在,如果你不按照它的规则来,那么你就会遇到如下情况:

(error-case 01)

...
%%

"+" | "-" { return yytext[0]; }

%%
...

由于没有紧跟在选择符号的两端,导致规则可以匹配前面的"+“符号,却没有办法匹配后面的”-",因为它被Flex丢弃了。

(error-case 02)

我想要换行表示,因为有很多的符号可能共享一个token语义值处理,你可能会写:

...
%%

"+"|
"-" { return yytext[0];}

%%
...

很遗憾它是错的,由于你使用了换行符,想让规则变得更清晰,可是对于Flex来说,"+"号后面的选择符号再后面是换行符
而这个换行符并不是显示表示的\n换行符,却是有flex来处理文件时碰到的的换行符,由于Flex要求规则和语义值处理部分需要在一行中,所以错了。

(error-case 03)

和case01类似,下面这个依旧是错的,编译都无法通过:

...
%%

"+"| "-" {return yytext[0];}

%%
...

选择符号后面并没有紧跟匹配内容,所以会报出Flex语法错误。

如何写选择规则才是对的?

其实也很简单,只要掌握两个原则:

  1. 如果书写在一行中的正则规则,那么请紧跟着选择符号的两边书写
  2. 如果书写不在一个中的正则规则,那么请在选择符号前面添加空格并在后面紧跟换行符

修改后的正确例子如下:

(ok-case 01)

...
%%

"+"|"-" { return yytext[0]; }

%%
...

(ok-case 02)

...
%%

"+" |
"-" { return yytext[0]; }

%%
...

多做练习和尝试,这些小问题是很好解决的。
祝你编程愉快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值