如何提取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循环的主体? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

for 循环是不是在每次迭代中重新评估其主体中的函数?

如何在 for 循环中提取 JSON 文件的元素

for-each 循环如何工作? [复制]

如何使用“for”循环创建变量名? [复制]

如何在颤动中用 for 循环替换 CARD

使用for循环时如何获取前一个元素? [复制]