2015-01-06 3 views
0

Xtext 문법에 터미널 목록이 있습니다. 어떻게 작동하는지 테스트 할 수 있으며 토큰 충돌이 없습니다. 예를 들어Xtext : xtext 렉서를 테스트하려면 어떻게해야합니까?

다음 터미널 :

terminal COMMA: ','; 
terminal QUESTION: '?'; 
terminal IDENTIFIER: ('a'..'z'| 'A'..'Z')+; 
terminal LENGTH: 'LENGTH' | 'l' | 'len'; 
terminal SEMICOLON: ';' ; 

나는 예를 IDENTIFIERLENGTH 위해 이렇게 서로 LENGTH을 충돌하지 않는 있는지 확인하려면 또는 LEN은 LENGTH하지 IDENTIFIER의 토큰을 제공합니다. (처음에 정의 된 토큰이 우선적이라고 가정하면 위의 문법에 잘못되었습니다)

답변

1

예제를 작성하고 언어를 생성하면 Antlr이 토큰 충돌을보고합니다.

테스트에 Provider를 삽입하면 전용 렉서 테스트가 설정하기가 쉽습니다. 당신은 또한 그럴듯하게 더 이상 유지되지 않는 xtext-utils을 들여다 볼 수 있습니다. 그러나 위키에는 테스트가 어떻게 생겼는지에 대한 통찰력이 있습니다.

+0

@Sebastien Zarnkoow 그렇습니다. 충돌은 괜찮습니다. 그러나 "HelloWorld"를 입력하고 식별자 토큰을 얻고 싶다고 말하는 일반적인 테스트 사례는 어떻게됩니까? 테스트에서는 "Test"("HelloWorld") == Tokens.ID가 실패하면 통과하지 못하게되어 필자는 필요한 모든 토큰을 필자가 처리했는지 확인합니다. 예를 들어 Antlrworks에서 토큰을 볼 수 있으며 구문 분석 후에 내가 원하는 토큰인지 확인할 수 있습니다. – Har

+0

xtext-utils에 대한 링크로 답변을 업데이트했습니다. –

+0

감사합니다 :) xtext-utils의 testTerminal (...)은 무엇을 찾고 있는지를 나타내는 exaclty입니다. – Har