저는 ANTLR을 처음 접했고 ANTLRWorks1.4.3에서 문법을 따르려고합니다.더 긴 토큰 내에서 토큰을 일치시키려는 ANTLR
command
: 'go' SPACE+ 'to' SPACE+ destination
;
destination
: (UPPER | LOWER) (UPPER | LOWER | DIGIT)*
;
SPACE
: ' '
;
UPPER
: 'A'..'Z'
;
LOWER
: 'a'..'z'
;
DIGIT
: '0'..'9'
;
'대상'에 '이동'및 '끝'키워드의 처음 두 문자가 포함 된 경우를 제외하고는 정상적으로 작동하는 것 같습니다. 나는 다음 명령을 주면 예를 들어 는 다음과 같이
go to Glasgo
노드 트리가 표시됩니다 내가 기대했다
이 대상으로 단어를 채우기에 맞게.
'go'대신 'travel'과 같이 키워드를 변경해 보았습니다. 이 경우 목적지에 'tr'이 있으면 ANTLR이 불평합니다.
왜 이런 일이 발생하는지 알고 싶습니다. 그리고 이것을 고치는 방법? 사전에
감사합니다.
감사합니다. 지금은 훨씬 명확 해. ** 규칙이 렉서 (lexer)가 만든 토큰들로만 구성된 경우 렉서 규칙을 작성하십시오. ** 올바른 진술입니까? –
@Atul, 아니, 꼭 그런 것은 아닙니다 (파서 규칙이 없을 경우 ...). 예를 들어,'command'도 토큰들로만 이루어 지지만 파서 규칙을 유지해야합니다. 렉서 규칙을 당신의 언어의 원자라고 생각하십시오. "대상"은 단 하나의 이름이므로 렉서 규칙이어야합니다. 그러나 "명령"은 여러 다른 (렉서) 규칙으로 구성되며 구문 분석 규칙이어야합니다. –
알았어, 됐어! 다시 한번 감사드립니다. –