2017-09-13 105 views
-3

我有一个python脚本,看起来像,我想变换以下的文件:Unix工具解析命令行

import sys 
# more imports 


''' some comments ''' 

class Foo: 
    def _helper1(): 
     etc. 

    def _helper2(): 
     etc. 

    def foo1(): 
     d = { a:3, b:2, c:4 } 
     etc. 

    def foo2(): 
     d = { a:2, b:2, c:7 } 
     etc. 

    def foo3(): 
     d = { a:3, b:2, c:7 } 
     etc. 

    etc. 

    if __name__ == "__main__":  
     etc. 

我希望能够解析只是foo*()功能,并保持只是具有某些属性的那些,如d={a:3, b:2}。显然,保持一切不是foo*(),所以转换仍然会运行。尽管d可能具有不同的键值,但foo*()将被很好地定义。

是否有一组unix工具可用于通过链接完成此操作?我可以使用grep来识别foo,但是我将如何扫描下几行来应用逻辑的保留或拒绝部分?

编辑:注意,我正试图查看在编写自定义分析器之前使用命令行工具执行此操作是否合理。我知道如何编写解析器。

+2

Python中有一些工具可以用来操作python,比起试图将自己的方式转换为临时Python解析器的方式来说,这会更加可靠。 – pvg

+0

你好。你的问题是无关紧要的,很可能会很快关闭。我建议您完成我们的[游览](https://stackoverflow.com/tour)并阅读我们的[帮助中心](https://stackoverflow.com/help)以了解本网站的主题。 –

+0

关于黑客新闻如何激进的SO已经有很多评论,并且上面的评论对此进行了描述。不知道为什么这被认为是脱离主题,因为我想在编写自定义分析器之前重用现有工具。由于unix有几十个命令行工具,所以不要期望别人知道所有这些工具... – rottyguy

回答

-1

您尚未指定足够详细的问题来推荐特定解决方案,但有许多工具和技术可以处理此类问题。

据我了解这一点,你要

  1. 识别类的边界
  2. 标识类
  3. 中的方法删除方法缺乏一定的文字特征

我对此的一般方法应该是一个基于“打开旧文件和新文件的逻辑”的脚本;写下你从旧文件读取的所有内容,除非。

您可以轻松地写东西,直到您进入课程(一个标志)并开始查找方法(另一个标志)。这里稍微有点棘手的部分是缓冲:你需要保留每个方法的文本,直到你知道它是否包含目标文本。您可以读取整个方法(轻微解析任务)并搜索目标文件,也可以只保存文本行,直到找到目标文件(然后返回到您的全部写入模式)或运行结束(空白没有写入的缓冲区)。

这足以让您用任何方便的语言拼凑脚本来处理问题。 UNIX提供了各种工具;在范例我会用awk。但是,我建议使用易于阅读的工具,如Python或Perl。如果你想正式进入解析的世界,我建议一个简单的Lex-YACC对联:你可以有非常简单的标记(甚至可以是完整的行,这取决于你的编码风格)和行为(写行,保持行,设置状态标志,清空缓冲区等)。

那是足以让你感动?

+0

好的谢谢。是的,我知道如何编写自定义解析器(我应该提到这一点),只是想知道在编写代码之前是否有一些命令行工具可以用来做这件事。 – rottyguy

+0

没有像命令行过滤器那么简单。 ** awk **可能是最直接的解决方案,但除非您已经知道pattern =>动作语法,否则它不会是您最有效的解决方案。 – Prune