나는 지금 ANTLR을 배우고 있습니다. 예를 들어, VHDL 코드가 있고 PROCESS 블록에서 일부 처리를 수행하려고합니다. 나머지는 완전히 무시해야합니다. 저는 프로세스 블록에만 관심이 있기 때문에 전체 VHDL 언어를 설명하고 싶지는 않습니다. 그래서 프로세스 블록과 일치하는 규칙을 작성할 수 있습니다. 하지만 ANTLR에 프로세스 블록 규칙 만 일치시키고 다른 것을 무시하도록 지시하려면 어떻게해야합니까?ANTLR : 방해물 제거
답변
내가 더 VHDL 옆에 알고, 그래서 당신이 다중 회선와 (자바) 소스 파일의 모든 한 줄 의견을 교환하고 싶은 말은하자가 코멘트 :
//foo
이 될해야합니다
/* foo */
물론 렉서가 한 줄 주석과 일치하도록해야합니다. 문자열 리터럴에 간다
/*
//bar
*/
같은 :
String s = "no // comment";
하지만 당신은 확실히 당신이 //bar
는 단일 라인 주석으로 인식하지 않기 때문에 여러 줄의 댓글을 인식해야한다 마지막으로, 임의의 문자와 일치하는 렉서에서 일종의 포괄 규칙을 만들어야합니다.
빠른 데모 :
grammar T;
parse
: (t=. {System.out.print($t.text);})* EOF
;
Str
: '"' ('\\' . | ~('\\' | '"'))* '"'
;
MLComment
: '/*' .* '*/'
;
SLComment
: '//' ~('\r' | '\n')*
{
setText("/* " + getText().substring(2) + " */");
}
;
Any
: . // fall through rule, matches any character
;
것은 지금과 같이 입력을 구문 분석하는 경우 : 다음은 콘솔로 인쇄됩니다
//comment 1
class Foo {
//comment 2
/*
* not // a comment
*/
String s = "not // a // comment"; //comment 3
}
:
/* comment 1 */
class Foo {
/* comment 2 */
/*
* not // a comment
*/
String s = "not // a // comment"; /* comment 3 */
}
참고이 있음 간단한 데모 : Java의 문자열 리터럴에 유니 코드 이스케이프가 포함될 수 있습니다. 데모에서는 지원하지 않으며 데모는 또한 문자 리터럴을 처리하지 않습니다 (문자 리터럴 char c = '"';
은이를 깨뜨릴 것입니다). 물론이 모든 것들은 수정하기가 쉽습니다.
곧 출시 될 ANTLR v4에서 퍼지 구문 분석을 수행 할 수 있습니다. 현재 베타 소프트웨어를 얻을 수 있습니다
http://www.antlr.org/wiki/display/ANTLR4/Wildcard+Operator+and+Nongreedy+Subrules
에서 살펴 :
http://antlr.org/download/antlr-4.0b3-complete.jar
테렌스
감사합니다! ANTLR은 정말 대단한 일입니다! 너의 책은 또한 위대하다! – Andy
- 1. 업무 방해물 깨기
- 2. ANTLR
- 3. ANTLR 4가 ANTLR 3보다 빠릅니까?
- 4. 생성 된 코드에서 ANTLR 종속성을 제거 할 수 있습니까?
- 5. Antlr 생성 Java가 일치하지 않습니다 Antlr IDE
- 6. ANTLR 문법 토큰 문제 (ANTLR works)
- 7. ANTLR 문법의 모호함
- 8. ANTLR 구문 사전
- 9. ANTLR NoViableAltException
- 10. ANTLR 재귀
- 11. ANTLR 모호함
- 12. ANTLR 문법은
- 13. ANTLR 직렬화
- 14. ANTLR 오류
- 15. ANTLR ClassCastException
- 16. ANTLR 문법
- 17. ANTLR : 액션
- 18. antlr - 문제
- 19. ANTLR : CommonTree
- 20. ANTLR 문법 문제
- 21. ANTLR 내 문자열 주위에 "를 제거하는 방법?
- 22. ANTLR 내가 현재 SQL 문을 받아들이는 ANTLR 문법에서 일하고 있어요
- 23. antlr 3.0에서 오류가 발생했습니다.
- 24. 구문 분석 CSS ANTLR
- 25. ANTLR 텍스트 속성이있는 NullPointerException
- 26. Antlr beginner mismatchedtoken question
- 27. ANTLR 달러 기호
- 28. ANTLR 문법 편집기 생성기?
- 29. ANTLR AST 연산자를 무시합니다.
- 30. Antlr 불필요한 조건이 필요합니까?
을 당신은 환영 @Andy이야. –
고마워요 @ 바트. "Any"규칙과 일치하는 ANTLR 데이터로 캡처하는 것이 가능한지 궁금합니다. 두 개의 SLComment 토큰 사이에있는 모든 텍스트를 캡처하고 싶습니다. 어떻게 가능합니까? – user1552175