2013-09-29 2 views
0

특정 ID에 일치 항목을 만들 수 있도록 antlr 문법을 작성하려고합니다.ANTLR4 시작 문자열과 끝 문자가 일치합니다.

'n'으로 시작하고 'd'로 끝나는 문자 이 ID에는 공백이있을 수 있습니다. 는 다른 곳에서 나는 A1이

그것은 =이 아닌 ID로 A1을 고려

을 시도하지 = 및 오류 노드

로 당신을 수 시도하는 식으로이 테스트

// lexer/terminal rules start with an upper case letter 
ID 
    : 
    (
    'a'..'z' 
    | 'A'..'Z' 
    | '0'..'9' 
    | ('+'|'-'|'*'|'/'|'_') 
    | '=' 
    | '~' 
    | '{' 
    | '}' 
    | ',' 
    | NA 
)+ 
    ; 

NA : 'n'[ ]['a'..'z']'d' ; 

WS : [ \t\n]+ -> skip; 

공백을 무시해야합니다 공백을 무시하지만 "시도하지 않음"으로 특정 문자열에 대한 예외를 만드는 문법을 사용하십시오.

답변

0

나머지는 ID ("A1")과 분리해야합니다. 또한 어휘 규칙의 우선 순위에주의를 기울여야합니다. 당신의 "n ... d"는 더 높은 우선 순위를 가져야합니다. 그래서 첫 번째 렉서 규칙 중 하나로서 받아 들여야합니다.

작업 문법 (만 예를 들어 테스트 "A1은 = 시도되지"이다.이 0 개 이상의 문자 A와 일치 할 수 있도록

statement : ID expr; 

expr : OP expr 
    | (NA | ID | OP) 
    ; 

NA : 'n'[a-zA-Z ]*'d' ; 

ID 
    : (
    'a'..'z' 
    | 'A'..'Z' 
    | '0'..'9' 
    | ('+'|'-'|'*'|'/'|'_') 
    )+ ; 

OP : '=' 
    | '~' 
    | '{' 
    | '}' 
    | ',' 
    ; 

WS : [ \t\r\n]+ -> skip; 

가 시작 규칙 statement와 그것을 시도 나는 NA 규칙 변경 z와 A부터 Z 및 Whitspace까지 어떤 순서로든 사용할 수 있습니다.

ANTLR의 행운은 좋은 도구입니다.

관련 문제