2011-04-05 4 views
0

나는 부분 태그가있는 텍스트를 AST의 절인 문구가있는 ANTLR3 AST로 변환하는 작업을하고 있습니다.일부 단어가 키워드 인 ANTLR3에서 Lexing space로 분리 된 단어

DT-THE The NN dog VBD sat IN-ON on DT-THE the NN mat STOP . 

즉, (태그 토큰) + 태그 또는 토큰이 모두 공백 포함 여기서

ANTLR에 대한 입력은 같다.

가되는 렉싱이 좋은 방법 다음

WS : (' ')+ {skip();}; 
TOKEN : (~' ')+; 

문법은 다음과 같은 항목을 포함하여 AST의 가장 낮은 레벨에 대해 설명하기 위해 다음의

dtTHE:'DT-THE' TOKEN -> ^('DT-THE' TOKEN); 
nn:'NN' TOKEN -> ^('NN' TOKEN); 

(186 자세히 이것들!)

이 접근법은 작동하는 것처럼 보이지만 ~ 9000 라인의 Java Lexer를 생성하고 (~ 2GB) 빌드하기 위해 많은 양의 메모리를 필요로하므로이게 opti인지 궁금해하고있었습니다. 이 문제를 푸는 방법.

답변

0

TAG 공간 TOKEN을 단일 AST 트리로 결합 할 수 있습니까? 그런 다음 TAG와 TOKEN을 모두 소스 코드에 전달하여 처리 할 수 ​​있습니다. 결과 트리를 처리하는 데 사용되는 Java 코드가 다양한 TAG 사이에서 매우 유사하다면 Java 코드에서 좀 더 복잡해지면서 ANTLR을 단순화 할 수 있습니다.

+0

답변을 주셔서 감사합니다. TOKEN이 렉서를 수정하여 단일 토큰으로 인식되는 것을 의미합니까? (그렇지만 각 태그 유형에 대해 하나의 렉서 규칙을 사용할 수 있습니까?) – Dan2097

관련 문제