Regex 如何递归地标识表达式中的运算符和参数
我有一个如下的表达Regex 如何递归地标识表达式中的运算符和参数,regex,parsing,recursion,Regex,Parsing,Recursion,我有一个如下的表达 abs(sum(Max(abs(ListInput)),Min(V1,V2))) 我想去掉一些运算符,它们接受一个参数,这是一个参数列表的符号,存储在其他地方 例如,在上述情况下 Max(abs(ListInput)) 这就是我需要的 我可以通过标记化表达式并将其转换为反向波兰符号,以迭代的方式完成这项工作 但当运算符是三元运算符时,情况就不一样了 IF(10 > Max(Abs(ListInput)),5,MAX(ListInput)) // (IF<EX
abs(sum(Max(abs(ListInput)),Min(V1,V2)))
我想去掉一些运算符,它们接受一个参数,这是一个参数列表的符号,存储在其他地方
例如,在上述情况下
Max(abs(ListInput))
这就是我需要的
我可以通过标记化表达式并将其转换为反向波兰符号,以迭代的方式完成这项工作
但当运算符是三元运算符时,情况就不一样了
IF(10 > Max(Abs(ListInput)),5,MAX(ListInput)) // (IF<EXPRESSION>,TRUEVALUE,FALSEVALUE) ; True value and Valse value can also be an expression.
我试图找到一种递归的方法来实现这一点,但无法考虑所有的条件
我想去掉运算符,它只取一个参数,这是一个
参数列表的符号
你不能用递归下降分析器来做这个吗?使用任何解析器生成器(如bison)都应该很容易实现。@barmar我的目标不是计算表达式,而是获取那些具有单输入依赖关系的运算符。这是类似于lisp的语言吗?@jgr208:看起来像是类似C的语言三元运算符:
/(abs|sum|max|min)\([^(),]*(\([^(),]*\)[^(),]*)*\)/gi