我将嵌套块定义为具有单独的开始和结束字符的东西。即{
和}
,[
和]
等。如果算法包含在分隔符(例如'{'
或"{"
),或明确转义,例如在评论栏中。
这不是家庭作业(我不是学生)或闲置的猜测。我的直接目标是按字母顺序重新排序ActionScript代码文件中的函数声明,以帮助调试/比较不同的版本。但真正的问题是对其他读者更有用的是如上所述的通用算法。在我的情况下,插件参数只是打开= {
,结束= }
,分隔符= "
,转义= //..[end of line]
。
请参阅以下内容,了解解释为什么正则表达式不是用于解析任意深层嵌套表达式的现有问题:
明显的直接解决方案是逐字逐句地构思并构建上下文堆栈和状态变量(“inQuote”,“inComment”等)。我之前做过这个。我只是想知道是否有更正式或更有效的解决方案;或者如果这是不可减少的。
答案 0 :(得分:1)
根据您的目的,您可以使用上下文堆栈解决方案,也可以从语句中构建表达式树。从我正在阅读的内容看起来上下文堆栈是最容易使用的,如果你只是想要一些简单的解析,但如果你需要复杂的表达式处理或只是多级表达式处理,那么你可能想要考虑一个表达树,也称为解析树(http://en.wikipedia.org/wiki/Parse_tree)。在您的情况下,如果正确完成,树将不会变得非常复杂。正如我所说的那样,只要你能得到整个功能块并以某种方式封装,只是按名称排序,我应该说它不应该复杂。