친애하는 Antlr4 커뮤니티,XSD Regex의 문법을 ANTLR4로 구문 분석하는 방법은 무엇입니까?
최근 정규 표현식을 XSD/xml에서 cvc4로 변환하기 위해 ANTLR4를 사용하기 시작했습니다. w3c에 지정된 문법을 사용합니다 (http://www.w3.org/TR/xmlschema11-2/#regexs 참조). 에 (charClass을 제거하여)이 문법을 단순화 나는이 질문에 대한 :
input 12{3,4}
:
input a(bd){6,7}c{14,15}
는 그러나, 나는에 대한 오류 메시지가 :
grammar XSDRegExp;
regExp : branch ('|' branch)* ;
branch : piece* ;
piece : atom quantifier? ;
quantifier : Quantifiers | '{'quantity'}' ;
quantity : quantRange | quantMin | QuantExact ;
quantRange : QuantExact ',' QuantExact ;
quantMin : QuantExact ',' ;
atom : NormalChar | '(' regExp ')' ; // excluded | charClass ;
QuantExact : [0-9]+ ;
NormalChar : ~[.\\?*+{}()|\[\]] ;
Quantifiers : [?*+] ;
구문 분석 잘 갈 것 같다
오류 :
라인 1 : 0 일치하지 않는 입력 '12'기대 {, '(', '|', NormalChar} 파서는 이후
내가 렉서는 첫 번째 심볼로 QuantExact를 볼 수 있다는 것을 이해하지만, NormalChar 찾고이 오류를 기대하지 않았다.
[1]과 QuantExact NormalChar 정의를 스와핑
저는 많은 변화를 시도했다. 그러나 스와핑 첫 번째 입력에 에러를 도입line 1:6 no viable alternative at input '6'
그런 경우 이후 '6'만 QuantExact 같은 NormalChar 같이 NOT 보인다.
[2] 렉서가이 제한된 컨텍스트에서 QuantExact 기호만을 제공하도록 QuantExact (수량의 중괄호)에 대한 컨텍스트를 만들어보십시오. 그러나 이것에 대한 ANTLR4 프리미티브를 찾지 못했습니다.
아무 것도 작동하지 않는 것 같습니다. 따라서 내 질문은 다음과 같습니다. 이 문법을 ANTLR4로 구문 분석 할 수 있습니까? 그렇다면 어떻게?
당신을 얼마나 자신이 그 'NormalChar의 정의에 .'는 내가 ANTLR 사용자 아니에요, 그리고 (이스케이프 할 필요가 없다 [문서] (https : //로 theantlrguy.atlassian.net/wiki/display/ANTLR4/Lexer+Rules) 약간 희미한가요?) 문자열 '12'는 표시된대로 문법을 구문 분석합니까? (오류 메시지에서 '아니오'라고 추측합니다.) 문자열 'abc'가 구문 분석합니까? –
@ C.M.Sperberg-McQueen, ANTLR4의 문자 집합 (문자 클래스)은 예상대로 동작합니다. \ 및] 만 이스케이프해야하고 다른 메타 문자는 필요하지 않습니다. –
"예상대로"? 내 기대는 그 것이다. 탈출해야합니다. 당연히 다른 기대치가있을 수 있지만, 2 ~ 3 개 이상의 정규 표현식 도구를 사용하는 사람은 기대가 문서화만큼 유용하지 않다는 것을 알게됩니다. –