2013-03-06 7 views
0

를 사용하여 문자열에서 분할 알파벳 문자와 숫자 내가 따로 알파벳 문자와 숫자를 구문 분석 문법이 방법 :구문 분석과 ANTLR 문법

grammar Demo; 

options 
{ 
    language = C; 
} 

program : process+ 
     ; 

process : Alphanumeric {printf("\%s",$Alphanumeric.text->chars);} 
     ; 

Alphanumeric : (Alphabet | Number)+ 
      ; 


fragment Alphabet : ('a'..'z')+ 
        ; 

fragment Number : ('0'..'9')+ 
       ; 

가정하자를, 입력은 'A10'또는 'B10'이다, printf 명령문은 a10이나 b10을 표시 할 것입니다. 그러나 알파벳 문자와 숫자를 나누어야합니다. 즉, a와 10을 따로 분리해야합니다. 왜냐하면 다른 문자열과 비교하여 숫자를 저장해야하기 때문입니다. 'a'또는 'b'옆에있는 문자를 테이블로 가져옵니다.

정확히 말해서, a10은 비교를 위해 나누어 져야하고 저장을 위해서는 10이되어야하며 알파벳과 숫자를 따로 따로 가져올 수 있어야합니다.

이런 식으로 문법을 정의하는 방법은 무엇입니까?

답변

1

AlphabetNumber을 파서에 개별적으로 노출해야합니다. 즉, 렉서의 최상위 규칙이어야합니다 (fragment 규칙이 아님). 결과적으로 Alphanumeric은 구문 분석 규칙이됩니다.