Python中带有正则表达式的函数解析器

Python中带有正则表达式的函数解析器,python,regex,Python,Regex,我有一个Fortran的源代码(几乎不相关),我想解析函数名和参数 eg使用 (\w+)\([^\(\)]+\) 与 我得到如下结果:(如预期的那样) 我需要的地方 a, b(1 + 2 * 2), c(3,4) b, 1 + 2 * 2 c, 3,4 有什么建议吗 感谢您抽出时间……我认为这不是正则表达式的工作。。。它们不能真正处理嵌套模式 这是因为正则表达式被编译成FSM(有限状态机)。为了解析任意嵌套的表达式,不能使用FSM,因为需要无限多个状态来跟踪任意嵌套。还可以看到这一点。这是一

我有一个Fortran的源代码(几乎不相关),我想解析函数名和参数

eg使用

(\w+)\([^\(\)]+\)

我得到如下结果:(如预期的那样)

我需要的地方

a, b(1 + 2 * 2), c(3,4)
b, 1 + 2 * 2
c, 3,4
有什么建议吗


感谢您抽出时间……

我认为这不是正则表达式的工作。。。它们不能真正处理嵌套模式


这是因为正则表达式被编译成FSM(有限状态机)。为了解析任意嵌套的表达式,不能使用FSM,因为需要无限多个状态来跟踪任意嵌套。还可以看到这一点。

这是一种非线性语法——您需要能够在一组允许的规则上递归。看看如何通过可读的规范进行简单的CFG(上下文无关语法)解析

我已经有一段时间没有写出CFGs了,我可能已经生疏了,所以我将向您介绍如何为语言语法的子集构造一个CFGs


编辑:如果示例始终很简单,您可以编写一个小型状态机类/函数,按照建议在标记化的输入字符串上进行迭代。

可以使用正则表达式完成—使用它们标记化字符串,并使用标记。i、 e.参见扫描仪的
re
。或者,只使用pyparsing。

您不能只使用正则表达式。它有点递归。您应该首先匹配最外部的函数及其参数,打印函数名,然后对其所有参数执行相同的操作(匹配函数名,然后匹配其参数)。单靠正则表达式是不够的。

你可以看一看,它(在我看来)使用起来非常简单,并且有很好的文档记录,它附带了一个很好的起点

我认为您不能仅使用正则表达式来实现这一点。顾名思义,它们只能处理正则表达式;我对语言理论的了解还不够,不知道Fortran会落在哪里,但我猜你需要一个框架解析器来正确地完成这项工作。对,你可以标记并使用你自己的状态机,你可以做到,但从技术上讲,这不仅仅是使用正则表达式。问题是我在问题中没有看到“只是正则表达式”,只有“正则表达式”。re模块包括一个扫描仪,并且已经有很多年了——并不是说它已经被记录了(bleh)+感谢我告诉我要看。:-)
b, 1 + 2 * 2
c, 3,4
a, b(1 + 2 * 2), c(3,4)
b, 1 + 2 * 2
c, 3,4