2009-06-25 3 views
2

Treetop에서 어떻게하면 좋을까요?Treetop/PEG에서 비 탐욕적 일치?

[^;]+ ';' 

추악한 .. 다른 방법의 종류는 어떤 :

/.+?;/ 

그것은 유일한 방법처럼 보인다는하는 것입니다? .+?이 작동하지 않는 것 같습니다.

+0

'parslet'에'rule (: line) {(str (";") >> any) .repeat (1) >> str (";")}'두 번째 옵션과 같습니다. –

답변

0

저는 Treetop을 모르지만 /[^;]+;/은 작동합니까? 빠른 검색에서


, 나는 나무 꼭대기 욕심도 게으른 (비 욕심)는 수량을하지 않는 제안을보고하고, + 것을 (다른 정규식 맛 ++으로 표시)를 소유 정량 사실이다.

이 경우, 부정한 클래스보다 다른 정규식 기반 옵션이 있는지 확신하지 못합니다.

+0

'/ [^;] +; /'내 질문에 나타난 것처럼'[^;] + ';''로 쓰여 있습니다. 그러나 더 좋은 방법이 있기를 바랬습니다. – cloudhead

1

글쎄, 나는 PEG가 탐욕 스럽다는 것을 배웠고, 그 주위에는 방법이 없다. Lookaheads 나중에 온다 그들이 할 수있는 그들이 무엇을 생각하지 않는 사람들이 많은 입력을 먹는 의미, 욕심 기본적으로 맹인 !(';' .)

9

PEG를 좋아하지만이 동작을 모방하는 데 사용할 수 있습니다

S <- P1* P2 (욕심

S <- P1 S/P2 (욕심, 비 맹검)

: 주문한 선택의 사용을 (함으로써 및 lookaheads)를 사용하지 않고 있지만 고정 상당히 쉽게 할 수있다, 블라인드)

S <- P2/P1 S (lazy, non-blind)