如何提取for循环的主体? [复制]
Posted
技术标签:
【中文标题】如何提取for循环的主体? [复制]【英文标题】:How to extract body of for-loop? [duplicate] 【发布时间】:2016-03-07 16:01:44 【问题描述】:有多个 C++ 文件。我需要从这些文件中提取 for-loop 的主体。
有没有一种简单的方法可以使用 grep。考虑没有嵌套的 for 循环。
【问题讨论】:
你为什么需要那个? 【参考方案1】:不解析整个文件,答案是否定的。
for 循环由 context-free grammar 组成,因此不能被正则表达式匹配。
更复杂的方法是使用 grep
搜索 for 循环的开头(for
后跟可选的空格,后跟 lpar),然后手动查找结束花括号。
不幸的是,解析 C++ 是图灵完备的,所以除非有一些可爱的标志可以传递给你的编译器,否则你会被淹没。
【讨论】:
我认为你的意思是 np 完整或困难,而不是图灵完整。 @Otomo 不,我的意思是Turing Complete,也就是说,您的解析器必须是图灵完备的才能解析源代码。 哦...我忘记了模板。但是在 P 中搜索 for 循环,不是吗?子串搜索是,括号匹配也是。解析 != 在文本文件中搜索。 @Otomo Paren 匹配本质上是 CFG,这是嵌套表达式减少的内容。考虑基本的(读不完整的)部分语法:for(<bool-expr>) <statement>*
。没有办法匹配结束花括号,因为语句也可以包含花括号。常规语言无法匹配 CFG。
@Otomo 这与解析代码有关。因为有定义的语法规则,所以解析是首选。解析代码块。但是,由于整个语言都不是 CFG,因此您不能使用解析器(TC 解析器除外)来获取这些块。其中一个块是 for 循环的主体。在上面的语法中,它将是<statement>*
。以上是关于如何提取for循环的主体? [复制]的主要内容,如果未能解决你的问题,请参考以下文章