내 용어가 꺼져 있으면 용서해주십시오.Antlr 서브 토큰 받기
내가 단순 문법이 비트가 있다고 가정하자 :
// parser
expr : COMPARATIVE;
// lexer
WS : ('\t' | ' ' | '\r' | '\n'| '\u000C')+;
COMPARATOR
: 'vs'
| 'versus'
;
ITEM
: 'boy'
| 'girl'
;
COMPARATIVE :ITEM WS* COMPARATOR WS* ITEM;
그래서이 과정 매치 'boy vs girl'
또는 'girl vs boy'
등 의 의지하지만 내 문제는 내가 렉서를 만들 때 즉,
CharStream stream = new ANTLRInputStream("boy vs girl");
SearchLexer lex = new SearchLexer(stream);
CommonTokenStream tokens = new CommonTokenStream(lex);
tokens.fill();
for(Token token : tokens) {
System.out.print(token.getType() + " [" + token.getText() + "] ");
}
이렇게하면 다음과 같이 인쇄됩니다. 9 [소년 대 소녀], 즉 내 쿼리와 정확하게 일치하지만 현재는이 현재 토큰의 하위 토큰을 얻을 수 있기를 원합니다.
내 직감은 내가 나무를 사용해야한다고 말하지만 Antlr4에서 내 예제를 위해이 작업을 수행하는 방법을 실제로 알지 못합니다. 감사합니다.
감사에게 많은, 그래서 EXPR라는 규칙이 있다고 할 수 있으며 실제로 EXPR'처럼 많은 것을 일치합니다 (비교 | ACTION_VERB * WS * (LOCATION | ITEM) | COPULAR_VERB * WS * (나이 | 성별 | 시간) | TIME) +;'expr과 일치하는 좋은 방법이 있는가? 그렇다면 'COMPARATIVE'토큰을 쉽게 파싱 할 수 있을까? 또는 토큰이 'COMPARATIVE'인지 확인한 다음 해당 토큰의 텍스트를 기반으로 토큰 스트림을 생성해야합니까? –
사이드 노트에! 큰 감사합니다! Antlr3에서이 작업을 수행 할 수 있지만 Antlr4에 대한 구문을 파악할 수 없다는 것을 알고있었습니다. :) –