在源代码中检测并匹配功能开口和结束括号

时间:2013-04-18 12:57:15

标签: function pattern-matching string-matching braces

我想知道是否已经有很好的算法来检测函数声明,函数内容,它的开括号和关闭函数。 对于bug的开发,调试和测试,在某些需要在大多数函数中添加大量代码的情况下,它可能会很好。

示例源代码:

Test.onLoad=function(event){
    Test.initialize();
};

结果:

  • 功能名称:Test.onLoad
  • 内容:Test.initialize();
  • 在第1行找到开口大括号。
  • 在第3行找到关闭括号。

我们可以通过上述信息轻松地在所有函数的开头添加一行,并在其末尾添加一行来记录一些参数:

Test.onLoad=function(event){
    Log("LogInit","function:Test.onLoad","openbraceline:1","content: Test.initialize();");
    Test.initialize();
    Log("LogEnd ","function:Test.onLoad","endbraceline :5","content: Test.initialize();");
};

我知道这个功能也可以通过一个简单的全局日志和一个调用堆栈来完成,但是仍有很多例子可以说这非常有用。


制作一个简单的算法来检测和匹配大括号并获取函数信息可能很容易,但有很多例外情况可能真的很复杂,这就是为什么我会问是否已经有很好的已知方法来检测它。 我不介意示例算法或提示是否使用任何语言,只是想看看这样做的最佳方法。

Notepad ++是一个很好的例子,因为它有一个插件,可以检测许多不同的源代码语言,并使用每个部分的颜色解析代码并匹配大括号。

2 个答案:

答案 0 :(得分:2)

使用真正的解析器是唯一适用于所有情况的解决方案。

这似乎是关于Javascript的,所以我的建议是使用Rhino,这很容易使用,但该工具最终会是一个java工具。

如果解决方案也需要使用Javascript,那么您可以查看this question about parsers in javascript

答案 1 :(得分:1)

如果你想要它完美,你将需要一个真正的语言解析器。如果没有,你可以设计一个简化的CFG并为其编写一个解析器(许多语法高亮显示器,我见过这样的工作。)