我想使用多个正则表达式如下(伪代码):
[0-9]+|[0-9]+.[0-9]+ - number
+|-|*|/ - sign
[number][sign][number]=[number] - math expression
我发现最接近的是this,但是代码是用JavaScript编写的,而我想使用lex / flex。
是否可以使用普通的RegEx语法?
答案 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生成的扫描器,构造一个表示方程的对象(或验证方程,如果这是意图。)
如果您使用问题中提出的正则表达式,您将会立即重新扫描匹配的等式以提取其组件;最好避免重新扫描。