2016-12-21 5 views
0

PLY를 사용하여 파서를 작성 했으므로 필요한 작업을 수행합니다. 이제 파서 클래스를 사용하여 여러 파일을 구문 분석하고 싶습니다. 각 파일의 파서 클래스를 인스턴스화하는 대신 모든 파일에 대해 동일한 인스턴스화 된 클래스를 다시 사용하여 파서 클래스에서 일부 결과를 누적 할 수 있습니다.PLY 파서를 다시 초기화합니다.

한 파일의 구문 분석이 제대로 완료되지 않아서 다른 파일을 제공하기 전에 파서를 다시 초기화하고 싶습니다.

PLY 파서를 다시 초기화하는 올바른 방법은 무엇입니까?

parser = yacc.yacc() 
for file in file_list: 
    with open(file) as fp: 
     parser.parse(fp.read()) 
     ... # accumulate logging info 
     parser.restart() # this discards the entire parsing stack and resets the parser to its initial state 

: 여러 파일에 대해 동일한 파서를 재사용 할 경우

+0

(면책 조항 : PLY는 사용하지 않습니다.) 보관하려는 데이터 유형의 예와 그 이유를 제공하면 더 많은 답변을 얻을 수 있습니다. PLY _does_가 안전한 재 초기화 메소드를 가지고 있다면, 유지하려는 정확한 값을 _un_- 다시 초기화 된 상태로 남겨 두지 않을 것입니다. ... 그 문제에 관해서는 사전에 각 파서로부터, 또는 파싱 된 파일마다 하나의 사전에 보관하고 싶은 데이터를 누적하는 것이 더 낫지 않습니까? –

+1

Verilog 파서를 작성 중이며 여러 Verilog 파일을 처리합니다. 그들 중 일부는 파일을 파싱 할 때 파서가 재미있는 상태로 멈추도록 오류를 포함 할 수 있습니다. 나는 파서를 재사용하여 파서 객체를 분해하고 새로운 파서 객체를 만들 필요가 없다고 생각했다. 또한 클래스의 여러 입력 파일에서 파싱 된 결과를 유지할 수 있습니다. – user2756376

+0

"그 중 일부는 오류가있어 파서가 재미있는 상태로 멈출 수 있습니다"라는 메시지와 함께 "여러 개의 입력 파일에서 파싱 된 결과를 유지할 수 있습니다"라는 메시지가 나타나 첫 번째 종류의 오류를 좋은 결과로 혼합하는 것처럼 들립니다 두 번째. 하지만 나는 여기서 내 영역을 벗어 났으므로이 질문을 다른 사람에게 남겨 두겠습니다. 나는 당신이 당신의 코멘트에서 당신의 질문에 대한 세부 사항을 당신이 편집 할 것을 제안합니다 - 그들은 여기 아래로 주목받지 못할 것입니다. –

답변

1

을 (? 아니면 내가 파서를 재사용 안)하지만, 스택 각 시간을 다시, 당신은 restart 기능을 사용할 수 있습니다 자세한 내용은 official documentation에서 확인할 수 있습니다.

관련 문제