2012-12-05 4 views
1

토큰이 있습니다. 2 가지 과제가 유효하고 그것을 수행하는 가장 좋은 방법을 찾기 위해 노력하고 있습니다. 예를 들어여러 과제가있는 Antlr 토큰

나는

TOSTRING = 'tostring' 

가 그렇지만, 나 또한 'toString이'과 같이 유효 할 :

TOSTRING = 'toString' 

이를 달성하는 가장 좋은 방법은 무엇입니까?

편집 : 내가

로에게 * .token 파일로 출력을 할 는 는 언어를 사용

내 코드는 토큰이 구조와 퍼팅 TOSTRING = 'tostring'를 사용합니다 {} 섹션 생성

TOSTRING=9 
'toString'=9 
'tostring'=9 
이. 하나의 과제를 가진 렉서 규칙조차도 이것을 수행합니다. 나는 여러 과제를 가질 때 토큰은

+0

"내 코드 ...이 구조를 사용하지 않았습니다"라는 질문에 미안합니다. 코드에서 .token 파일을 읽으려면 ANTLR이 토큰 이름과 토큰 ID에 대해 연관을 생성한다는 점에 유의하십시오. 렉서/파서를 생성 한 후에 ANTLR이 신경 쓰지 않는 것 *이 아닙니다. 이 파일로 코드가하는 것은 무엇입니까? 그것을 읽는 대안을 찾는 것에 대해 이야기 할 수 있을까요? – user1201210

답변

4

일반적으로 렉서 컨트롤을 잃어 버리면 토큰 섹션을 사용하지 마십시오. 항상 실제 렉서 규칙을 사용하십시오. 토큰 섹션은 어쨌든 렉서 규칙을 자동으로 추가합니다. 단순한 문자열 이상을 원할 때 한계에 부딪 치기 시작하면 차이가 없습니다.

당신이 경우 독립을 원한다면, 여기에 문서를 참조하십시오

How do I get Case independence?

을하지만 LA (의 재정의를 통해 구현) (이 설명)이 아니라 'A'| '는'방법 , 당신이 필요하지 않은 많은 코드를 생성합니다. 그냥 낙타의 경우라면

TOSTRING 
    : 'to' ('s' | 'S') 'tring' 
    ; 
3

가장 빠른 방법은 허용하도록 렉서 규칙 TOSTRING을 정의하는 것입니다 'toString'또는 'tostring'에 대한 확인되지 않은 두 :

TOSTRING 
    : 'tostring' //alternative #1, lower-case 's' 
    | 'toString' //alternative #2, upper-case 'S' 
    ; 

또는 동등 :

TOSTRING 
    : 'to' ('s' | 'S') 'tring' 
    ; 
+0

@BartKiers 잘 부탁드립니다. – user1201210

+0

이미 좋은 답변 이었지만 지금은 더 좋은 답변입니다! ;) –

+0

토큰 할당을 유지하면서 수행 할 수있는 작업이 있습니까? 'TOSTRING =' – merjr