2011-05-04 3 views

답변

4

BNF의 자주 효과적으로 선택 전체 표현하고, 대안으로 빈 사용

# no empty required 
leading_sign = Optional(oneOf("+ -")) 
integer = leading_sign + Word(nums) 

빈을 수행합니다 대한 파싱이에 대한 옵션 클래스가 포함되어 있기 때문에,

leading_sign ::= + | - | empty 
integer ::= leading_sign digit... 

이 대한 파싱에서 불필요을 비록 특정 pyparsing - 특정 목적을 위해 편리하게 :

공백을 건너 뛰십시오 - pyparsing의 일부 요소는 공백을 건너 뛰지 않습니다 CharsNotIn 및 restOfLine과 같은 구문 분석을 시작하기 전에 당신은 키가 인용 된 문자열했다있는 키 - 값 항목의 간단한 입력을했고 값은 인용 된 문자열 후,이 같은 모든 인 경우 :

"Key 1" value of Key 1 
"Key 2" value of Key 2 

으로이 정의 :

quotedString + restOfLine 

은 "키 1의 값"과 "키 2의 값"을 값으로 제공합니다. 선두 공백없이 당신에게 가치를 줄 것이다

quotedString + empty + restOfLine 

: 대한 파싱의 빈 지금까지 문법을 변경, 공백 건너 뛸 않습니다.

특정 위치에서 구문 분석 작업 활성화 - 원본 및 텍스트 위치 마커를 삭제하려면 originalTextFor에서 생성 된 표현식의 일부로 공백을 사용했습니다. empty의 구문 분석 조치는 위치 값으로 바꿉니다. originalTextFor의 구문 분석 조치는 해당 위치를 사용하여 입력 문자열에서 원래 텍스트를 잘라냅니다.

비어있는 것을 사용하십시오. empty 항상과 일치하지만 구문 분석 위치를 전진시키지 않습니다 (공백을 건너 뛰는 경우 제외). 따라서 :

OneOrMore(empty) 

은 무한 루프가됩니다.

empty | "A" | "B" | "C" 

은 MatchFirsts 단락 이후 비어 있지 않은 대안과 일치하지 않습니다.

관련 문제