2016-09-07 6 views
2

G4가 : 분석 할 때특정 구문 분석기 규칙을 지정하여 공백을 생략 할 수 있습니까?

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

그것은 어떤 특별한 상황에서 모든 blanks.But을 건너 의미, 난 그냥 공백을 건너 뛸 몇 가지 규칙이 필요합니다.

공란을 건너 뛰는 특정 구문 분석기 규칙을 어떻게 지정할 수 있습니까? 의견을 보내 주셔서 감사합니다.

나는 quesetions를 업데이트

G4 :

WS: [\r\n \t] -> skip; 
String:[a-zA-Z]+; 

stringline:'"' String '"'; 

으로 myText : 보시다시피

"aaaa bbbb" 

, 나는 건너 뛰는 아래 "stringline"로 "AAAA BBB"recgonize 필요 공백, 어떻게?

+0

일반적으로 마이크가 옳습니다. 그러나 렉시 컬 모드에서는 가능한 것이있을 수 있습니다. 그러나 문제의 실제 사례를 제시해야합니다. –

+0

따옴표가있는 렉서 규칙을 만들어 보지 않겠습니까? 'String :' " '~ [\ r \ n"] *' " ';'? –

+0

문자열 :'" '~ [\ r \ n "] *'" ''; WS : [\ r \ n \ t] -> 건너 뛰기; 갈등이있는 것 같습니다. – MarkMa

답변

2

파서 및 렉서는 독립적입니다. 파서에서 렉서를 지시 할 수는 없습니다. 따라서 모든 공백을 건너 뛰거나 모든 규칙 (렉서 + 파서)에서 명시 적으로 처리하지 않아도됩니다.

정말 특별한 공간 처리 등이 필요한 경우 솔루션을 생각하는 것이 더 나을 것입니다. 해석 할 언어를 다시 정의하십시오 (그렇게 할 수있는 위치에 있다면).

업데이트 : 당신이 당신의 질문에 변경에서 당신이 바트 모두 외부 따옴표를 포함하는 특정 렉서 규칙을 만들 제안 이유입니다, 문자열에 공백을 유지하는 방법을 요구하는 것처럼

이 나타나고 가능한 공백 문자. 그러나 다른 규칙에서 공백을 "훔치지"않도록 WS 규칙을 문법보다 훨씬 아래쪽으로 이동해야합니다. 일반적으로 WS 규칙은 렉서 문법의 마지막 규칙 중 하나입니다 (순서는 문법 파일에서 중요하기 때문에).

+0

오 ... 알았어 ... 고마워, 마이크. – MarkMa

+0

그건 그렇고, 나는 너의 의견을 이미 받아 들였다. . – MarkMa

+0

Em ... C++ 규칙 파일이 있습니까? 그 복사본을 제공 할 수 있습니까? – MarkMa