将多个正则表达式分组以便在lex中重用

时间:2016-11-27 11:37:44

标签: regex flex-lexer lex

我想使用多个正则表达式如下(伪代码):

[0-9]+|[0-9]+.[0-9]+ - number
+|-|*|/ - sign

[number][sign][number]=[number] - math expression

我发现最接近的是this,但是代码是用JavaScript编写的,而我想使用lex / flex。

是否可以使用普通的RegEx语法?

1 个答案:

答案 0 :(得分:1)

(F)lex提供了定义宏实际上是什么的可能性。这些定义位于 definitions 部分(第一个%%之前),简单语法在flex manual中描述,并带有示例。

所以你可以写

number [0-9]+|[0-9]+.[0-9]+
sign [+*/-]
%%
{number}{sign}{number}={number}     { /* do something */ }

但这很少是一个好主意,它肯定不是(f)lex的预期用途。通常,您可以使用flex将输入分解为五个标记的序列:数字,运算符,另一个数字,=和最终数字。你可以使用一个解析器,它重复调用flex生成的扫描器,构造一个表示方程的对象(或验证方程,如果这是意图。)

如果您使用问题中提出的正则表达式,您将会立即重新扫描匹配的等式以提取其组件;最好避免重新扫描。