2013-07-30 3 views
1

그래서 SimpleNode의 서브 클래스에 메소드를 추가하고 싶습니다. 예를 들어 위치 노드가 있습니다. jjt와 javacc를 실행하면 Position.java가 생성됩니다. 모양이 예상됩니다JJTree는 노드 클래스에 메소드를 추가합니다.

class Position extends SimpleNode { 
    private int line, column; // I'll add private members here 
    ... 
    public int getLine() { 
     return this.line; 
    } // add some methods here 
    ... 
} 

이제 생성 된 Java 파일을 변경하고 있습니다. 그러나 생성 된 java 파일이 자주 제거되고 jjt 파일이 다시 만들어지기 때문에 그렇게하는 것은 좋지 않습니다. 이 선언을 jjt 파일에 추가 할 수 있습니까 (설명서에서 이와 같은 것을 찾지 못했습니까?). 나는 또한 그것들의 서브 클래스를 파생시킬 생각을하고있다. 그것은 깔끔하게 작동하지 않습니다.

+0

옵션에'NODE_CLASS' 변수를 사용하고 있습니까? 참조 : https://javacc.java.net/doc/JJTree.html –

+0

예. 하지만 노드 클래스는 성공적으로 생성됩니다. 문제는 내가 그들을 수정하고 싶지 않다는 것입니다 .. –

답변

3

노드 구현을 원하는대로 수정할 수 있습니다. JJTree는 누락 된 경우에만 생성합니다. the manual

노드 클래스에 대한 구현을 제공하지 않으면 JJTree가 SimpleNode 기반의 샘플 구현을 생성합니다. 그런 다음 구현을 수정하여 적합하게 만들 수 있습니다.

+0

고마워! 이것은 유용합니다. 나는 어쨌든 Makefile에 의해 생성 된 것을 수정하지 않는 방법이 있는지 궁금해서 질문했다. 내 현재의 솔루션은 노드의 값 필드에'jjtSetValue'를 사용하여 추가하고자하는 것을 저장하는 것입니다. –

+0

잘 확인하십시오; make 파일에서 생성 된 파일을 삭제하고 JJTree를 실행하여 파일을 다시 생성 한 다음 sed 또는 awk 또는 컴파일하기 전에 결과 파일을 수정할 수 있습니다. 이것은 필요 이상으로 복잡해 보입니다. 내가하는 일은 생성 된 파일을 편집하여 소스 저장소에 체크인하는 것입니다. 유일한 위험은 JJTree의 새 버전이있을 때 이전 버전에서 생성 된 노드 파일이 호환되지 않는다는 것입니다. 나는 그런 일이 일어날 확률이 낮다고 말할 것이다. 나는 ParseException과 함께 일어 났지만, 노드 클래스에서 발생하지는 않을 것이라고 생각한다. –