2014-02-18 7 views
0

나는,Antlr4 렉서 술어가 필요합니까? 그들이 줄을 시작하기 때문에

:20: test :254: 
aapje 
:21: rest 
... 

:20::21: 특수 태그입니다 텍스트의 조각을 구문 분석하려고합니다. :254:은 줄 바꿈에서 시작하지 않으므로 '보통'텍스트 여야합니다.

나는 결과가되고 싶습니다

(20, 'test :254: \naapje') 
(21, 'rest') 

선 내가 공백을 무시하려고 시작

\r\n 또는 '\ n을'중 하나를 사용하여 종료됩니다,하지만 내가 '경기 : 254 : '태그도. 그래서 공백 정보를 사용하는 무언가를 만들어야합니다. 내가 할 수 있도록하고 싶습니다 무엇

이 같은 것입니다 :

lexer grammar MT9740_lexer; 

InTagNewLine : '\r\n' ~':'; 
ReadNewLine :'\r\n' ; 

그러나 첫 번째는이 : 어떻게 여전히 이러한 토큰을 생성 할 수 있습니다 소비 것인가? 아니면 똑똑한 접근법이 있습니까?

답변

1

내가 알고있는 것은 당신이 라인의 시작과 일치하는 렉서 규칙을 찾고 있다는 것입니다. 20 : :이 렉서 규칙은 당신을 토큰 화해야하거나 : 21 : 만

SOL : {getCharPositionInLine() == 0}? ':' [0-9]+ ':' ; 

파서 규칙, 행의 나머지 부분을 분석하기 전에이 SOL 토큰 볼 수 행의 시작에 나타나는.