나는 ANTLR 4.5에 렉서를 쓰는 법을 배우기 시작했다. 문서로 제공되는 this page에서 more, pushMode (x), popMode, type (x), channel (x), mode (x), skip과 같은 Lexer 명령이 있음을 알았습니다.ANTLR4에서 다양한 Lexer 명령의 기능. 내 해석이 맞습니까? 그들 각각은 무엇을합니까?
나는 그들의 기능을 명확하게 이해하지 못했습니다.
이 현재 토큰에 읽은 모든 문자를 건너 뜁니다
생략 : 다음은 그들 각자가하는 일에 대한 이해이다. 과거의 토큰은 그대로 남아 있습니다.
그래서, 렉서는 일부 문자 a
를, 읽기 그리고 다음 다음 멀리 모두 a
및 b
을 던져 다음 토큰로 이동합니다
SOME_RULE : 'b' -> skip;
에 해당하는 b
읽는 경우.
더 많은 답변
잘 모르겠습니다. 문서에 따르면 읽은 텍스트는 버려지지 않을 것이지만 토큰이 마침내있을 것입니다. , 나는 b
다음
RULE_1 : 'a' -> more;
RULE_2 : 'b';
a
읽을 경우
하고 있다고 가정하는 의미 값 ab
, 또는 RULE_1 RULE_2
, 또는 다른 뭔가 RULE_2
에 결과 토큰 대응?
유형 내가
RULE_1 : 'a' -> type(TOKEN_1);
RULE_2 : 'b';
만 a
이 TOKEN_1
의 의미 값으로 이동합니다, 또는 모든 문자가 오른쪽에서하지 토큰했다 규칙에 해당하는 경우 (x)를
마지막 토큰은 의미 론적 값으로 받아 들여질 것인가? b
과 a
이 도착하면 TOKEN_1
값은 a
또는 ba
이됩니까?
모드 (X)는
이것은 새로운 mode
로 모드를 전환한다. 하지만 여기서 스위치의 위치가 유지되거나 폐기 될 때까지 문자가 읽습니까? 토큰은 어떨까요? 각 모드마다 별도의 스택이 있습니까?
pushMode (x)는
어떻게 이런 일이 mode
다릅니 까? 이미 읽은 문자가 앞으로가는 모드로 푸시되는 경우입니까? mode
에서 발생하지 않습니까?
popMode
튀어 나온 것은 무엇입니까?어느 경우 나, 토큰 b
와 a
, popMode
원인 만 a
반환 할 것, 또는 ba
, 또는를 받으면 나는
RULE_1 : 'a' -> popMode;
RULE_2 : 'b' ;
이 있다면? 빈 스택으로 인해 때때로 오류가 발생하는 이유는 무엇입니까?
채널 (x)를
나는 이것에 대한 설명을 찾을 수 없습니다. 채널이란 무엇입니까?
가능하면 누구나이 명령의 기능에 대해 명확하게 설명해 주시겠습니까?
너무 넓 으면 알려주세요.
감사합니다.