2017-11-29 33 views
0

java 파일의 메소드 선언의 매개 변수를 가져와야합니다. 메소드 이름 및 방법 클래스 이름 사이에 공백이 없는지,Java.g4 문법 파일 변경

@Override 
 
    public Object visitMethodDeclaration(JavaParser.MethodDeclarationContext ctx) { 
 
     TokenStream tokens = parser.getTokenStream(); 
 
     String type = "void"; 
 
     if(ctx.type() != null) { 
 
      type = tokens.getText(ctx.type().getSourceInterval()); 
 
     } 
 
     String args = tokens.getText(ctx.formalParameters()); 
 

 
     System.out.println("\t" + type + " " + ctx.Identifier() + args + ";"); 
 
     return super.visitMethodDeclaration(ctx); 
 
    }

문제는 다음과 같습니다 나는 JavaBaseListener 인터페이스와 그 방법을 사용하고 있습니다. 입력 : private void addLoan (대출 대출)

출력 : void addLoan (Loanloan);

나는 java.g4 문법 파일을 변경했는데,이 공백

formalParameter 추가 : variableModifier * 유형 ","variableDeclaratorId 을;

하지만 지금과 같은 오류가 많이 있습니다

라인 1 : 6 입력에서 어떤 대안은 '공공' 라인 1시 12분 외부 입력 ''기대 식별자 라인 1시 20분 외부 입력을 ' '{기대'구현 ','{ ','< '} 라인 2 : 입력에서 5 어떠한 대안' ','확장 목록 ' ...

무엇입니까 내 문제에 대한 최선의 해결책과 방법 내가 처리 할 수 ​​있을까? java8 문법에서 앞으로

+0

p.s. 어쩌면 누군가 좋은 javabasevisitor 사용 예제/튜토리얼을 가지고 있기 때문에 아무 것도 찾지 못했습니다. –

+0

[The ANTLR mega tutorial] (https://tomassetti.me/antlr-mega-tutorial)의 25-26 장에 방문자 예가 있습니다. /). – BernardK

답변

0

에서 덕분에

WS : [ \t\r\n\u000C]+ -> skip 

멀리 공백 (-> skip)를 던졌습니다의 WS 규칙을 in this repository을 발견했다.

작은 문법 in this answer을 사용하면 -> skip-> channel(HIDDEN)의 차이를 확인할 수 있습니다.

WS : [ \t] -> channel(HIDDEN) ;으로 출력은

Expression found : 3 + 4 

WS : [ \t] -> skip ;로 출력 당신이 WS 토큰이 나타나는 첫 번째 경우에 그것을 볼 수 있습니다

$ grun Question question -tokens -diagnostics input.txt 

명령을 사용하여

Expression found : 3+4 

입니다 토큰 목록에는 두 번째 경우에는 아이가 사라집니다.

This other examplegetText()에 따라 달라집니다 : paydeltaco98pay delta co 98.

+0

정말 고마워요! 그게 지금 일하고있어. –