【发布时间】:2021-05-18 08:56:21
【问题描述】:
我最近一直在从事编译器设计工作,发现正则表达式相当棘手。 所以我正在制作一个我需要词法规范的词法分析器。
我无法弄清楚标识符的 RE(规则定义如下):
- 最多 4 个字符
- 至少 1 个字母
我已经尝试过的:
(letter|digit){4} // 我读到我们可以限制这样的发生。但在这种情况下,11aa 也会被接受。
我想我也可以这样重写上面的语句。
(字母|数字)(字母|数字)(字母|数字)(字母|数字)
如有错误请指正,提前谢谢!
【问题讨论】:
-
提示: 1. 如果我们要求第一个字符是字母,RE 会是什么? 2. 你能把它概括成四个位置中的任何一个吗?
-
@ivan_onys 我相信如果我们要求第一个字符是字母,那么 RE 将类似于:(letter)(letter|digit)
-
(字母)(字母|数字){,3} | (字母|数字)(字母)(字母|数字){,2} | ...这似乎是一个解决方案?
-
@ivan_onys 非常感谢朋友。请在答案框中提及,我会接受您的解决方案。因为,它对我有用。
标签: regex compiler-construction regular-language automata