ANTLR LEXER RULE에서는 두 기호를 포함한 모든 문자를 허용합니다 (예 : (
, )
, _
등)이고 다른 문자는 a
~ z
의 문자 만 허용됩니까? 다음과 같은ANTLR LEXER RULE에는 두 가지 규칙이 있습니다. 하나는 기호를 포함한 모든 문자를 허용하고 다른 하나는 문자 만 허용합니다.
뭔가 :
String: ('a'..'z'|'A'..'Z')*;
EVERYTHING:(.)*;
ANTLR LEXER RULE에서는 두 기호를 포함한 모든 문자를 허용합니다 (예 : (
, )
, _
등)이고 다른 문자는 a
~ z
의 문자 만 허용됩니까? 다음과 같은ANTLR LEXER RULE에는 두 가지 규칙이 있습니다. 하나는 기호를 포함한 모든 문자를 허용하고 다른 하나는 문자 만 허용합니다.
뭔가 :
String: ('a'..'z'|'A'..'Z')*;
EVERYTHING:(.)*;
네, 가능합니다. 이상의 규칙이 서브 순서를 일치시킬 수 있습니다 경우 - (입력의 형태로 현재 위치를 시작) 중 규칙은 입력의 긴 서브 순서를 일치시킬 수 있습니다 - :
이것은 ANTLR 렉서 사용 배제하는 결정하는 방법이다 (문법 파일에 정의 된대로) 첫 번째 규칙이 승리합니다.
따라서, 알파 전용 입력의 경우 두 규칙이 모두 일치하지만, String
이 문법에 더 가까이 있기 때문에, 그것은 사용될 것입니다. 비 알파 입력의 경우, EVERYTHING
규칙은 더 긴 서브 시퀀스와 일치 할 수 있으므로 사용됩니다.
그러나 작성된대로 EVERYTHING
규칙은 공백과 줄 바꿈과 일치하므로이 특정 경우 String
규칙은 전체 입력이 단지 알파 문자이고 다른 문자는없는 경우에만 사용됩니다. 두 경우 모두에서 전체 입력이 단일 토큰으로 일치됩니다. 실제 문법에서는 EVERTYHING
규칙이 약간 다를 수 있습니다.
그래, 나는 두 렉서 규칙을 지키려고했지만 문자열 규칙을 사용하거나 실패 할 수 없다는 문제를 만듭니다. 렉서 규칙과 다른 룰에 영향을 미치지 않도록 할 수있는 방법을 제안하십시오. –
게시물을 편집하고 실패한 예제 문법을 추가 할 수 있습니까? –