2014-02-12 1 views
0

antlr4을 사용하여 MT940 파서를 작성하려고합니다. 문법은 간단하지만 대부분의 경우 작동합니다.ANTLRworks의 TestRig : 자신의 클래스를 사용하는 방법?

이제 직접 수업을 듣고 싶습니다. 이 작동합니다 :

file returns [String myString] 
    : 
    Header940? record+ EOF 
    ; 

나는 이것이 기본 자바 패키지에 있다고 생각합니다.

내가이 원하는 :

file returns [List<MT940Record> records] 
    : 
    Header940? record+ EOF 
    ; 

TestRig는 (논리적으로) 불평 :

/tmp/TestRigTask-1392235543340/MT940_5aParser.java:50: error: cannot find symbol 
     public List<MT940Record> records; 
        ^
    symbol: class MT940Record 
    location: class FileContext 

어떻게 ANLTRWorks에서 TestRig에서 CLASSPATH/lib 디렉토리를 설정할 수 있습니까?

답변

1

ANTLRWorks에서는 사용할 수 없습니다. 문제 추적기에 문제를 추가 할 수 있습니다. https://github.com/sharwell/antlrworks2/issues

ANTLR 4는 더 이상 사용자 정의 인수 및/또는 문법의 반환 값을 사용할 필요가 없도록 설계되었습니다. 위에서 설명한 것처럼 List<MT940Record>을 반환하는 대신 필요한 결과를 계산하기 위해 구문 분석이 완료된 후 리스너 또는 방문자를 사용해야합니다.

+0

감사합니다. 280Z28; 리스너로 전환하는 것이 가장 좋은 접근 방법이며, 메모리/성능 현명한 방법이라고 생각합니다. 내일 나는 종이 antrl4 레퍼런스를 파고 들기 시작한다. – RobAu