2017-09-13 12 views
-3

명령 행에서 파일을 구문 분석 :유닉스 도구는 내가 변환 할 다음과 같은 파이썬 스크립트가

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*()은 잘 정의됩니다.

체인을 통해이 작업을 수행 할 수있는 유닉스 도구가 있습니까? grep을 사용하여 foo을 식별 할 수는 있지만 논리의 유지 또는 거부 부분을 적용하려면 다음 몇 줄을 어떻게 스캔합니까?

편집 : 메모, 맞춤 구문 분석기를 작성하기 전에 명령 줄 도구로이 작업을 수행하는 것이 합리적인지 확인하려고합니다. 나는 파서를 쓰는 방법을 안다.

+2

파이썬을 조작하기 위해 파이썬에 내장 된 도구가 있습니다. 즉, 애드혹 파이썬 파서로 정규식을 적용하는 것보다 훨씬 안정적으로 작동합니다. – pvg

+0

안녕하세요. 귀하의 질문은 주제와 관련이 없으며 곧 닫힙니다. [둘러보기] (https://stackoverflow.com/tour)를 작성하고 [도움말 센터] (https://stackoverflow.com/help)를 읽고이 사이트의 주제가 무엇인지 이해하는 것이 좋습니다. –

+0

Hackernews에 대해 호전적인 SO가 어떻게되어 왔으며 위의 의견에이 점에 대해 많은 논평이있었습니다. 필자가 맞춤 구문 분석기를 작성하기 전에 기존 도구를 다시 사용하려고 할 때 이것이 왜 주제와 관련이 없는지 확실하지 않습니다.유닉스에는 수십개의 명령 행 도구가 있기 때문에 사람들이 모든 것을 알기를 기대하지 않는 것이 타당하다. – rottyguy

답변

-1

특정 솔루션을 권장하기에 충분한 세부 사항으로 문제를 지정하지는 않았지만 이러한 유형의 문제를 처리 할 수있는 많은 도구와 기술이 있습니다. 나는이 알고있는 것처럼

, 당신은

  1. 클래스
  2. 내에서 방법을 확인 클래스의 경계를 식별 특정 텍스트 기능

부족한 방법을 제거 할 내 이것에 대한 일반적인 접근법은 "이전의 오래된 파일과 새로운 파일을 기반으로 한 논리를 가진 스크립트 일 것입니다. 이전 파일에서 읽은 모든 것을 쓰지 않는 한."

클래스에 들어갈 때까지 (블럭 한개) 메소드를 찾는 것 (다른 플래그)을하기 전에 블릿하게 쓸 수 있습니다. 여기서 약간 까다로운 부분은 버퍼링입니다. 대상 텍스트가 있는지 여부를 알 때까지 각 메서드의 텍스트를 유지해야합니다. 전체 방법 (작은 구문 분석 작업)에서 대상을 검색하거나 대상을 찾을 때까지 텍스트 줄을 잡고 (write-it-all 모드로 돌아 가기) 또는 끝에서 실행 (empty 기입 해지지 않는 버퍼)

이것은 문제를 처리하기위한 간단한 언어로 스크립트를 작성할 수있을 정도로 간단합니다. UNIX는 다양한 도구를 제공합니다. 에서 패러다임을 사용하고 싶습니다. awk입니다. 그러나 Python이나 Perl과 같은 읽기 쉬운 도구를 사용하는 것이 좋습니다. 공식적으로 구문 분석의 세계로 옮기고 싶다면 사소한 Lex-YACC 방식을 제안한다. 코딩 스타일에 따라 아주 간단한 토큰 (줄 바꿈, 줄 쓰기, 상태 설정)을 할 수있다. 플래그, 버퍼 플러시 등).

이동하기에 충분합니까?

+0

감사합니다. 네, 커스텀 파서를 작성하는 방법을 알고 있습니다. (그리고 필자는 이것을 언급 했어야합니다.) 코드를 작성하기 전에 이것을 수행 할 수있는 몇 가지 명령 행 도구가 있는지 궁금합니다. – rottyguy

+0

명령 줄 필터만큼 간단하지 않습니다. ** awk **가 가장 직접적인 해결책 일 수도 있지만, 패턴 => 액션 구문을 이미 알지 못하면 가장 효과적인 해결책은 아닙니다. – Prune