# HG changeset patch # User Claus Gittinger # Date 1393943650 -3600 # Node ID 8fc35b70c3b96868e4e83c06b2d6de9fe811af47 # Parent e094104de2e5f7ee11135a234dad3ff07b667332 update diff -r e094104de2e5 -r 8fc35b70c3b9 PPComposedTest.st --- a/PPComposedTest.st Tue Mar 04 15:34:09 2014 +0100 +++ b/PPComposedTest.st Tue Mar 04 15:34:10 2014 +0100 @@ -1,6 +1,6 @@ "{ Package: 'stx:goodies/petitparser' }" -PPAbstractParseTest subclass:#PPComposedTest +PPAbstractParserTest subclass:#PPComposedTest instanceVariableNames:'' classVariableNames:'' poolDictionaries:'' @@ -25,17 +25,15 @@ !PPComposedTest methodsFor:'testing'! testDoubledString - | parser | - parser := ($' asParser , (($' asParser , $' asParser) / $' asParser negate) star flatten , $' asParser) - ==> [ :nodes | nodes second copyReplaceAll: '''''' with: '''' ]. + | parser | + parser := ($' asParser , (($' asParser , $' asParser) / $' asParser negate) star flatten , $' asParser) + ==> [ :nodes | nodes second copyReplaceAll: '''''' with: '''' ]. - self assert: parser parse: '''''' to: ''. - self assert: parser parse: '''a''' to: 'a'. - self assert: parser parse: '''ab''' to: 'ab'. - self assert: parser parse: '''a''''b''' to: 'a''b'. - self assert: parser parse: '''a''''''''b''' to: 'a''''b' - - "Modified: / 18-12-2010 / 18:00:16 / Jan Kurs " + self assert: parser parse: '''''' to: ''. + self assert: parser parse: '''a''' to: 'a'. + self assert: parser parse: '''ab''' to: 'ab'. + self assert: parser parse: '''a''''b''' to: 'a''b'. + self assert: parser parse: '''a''''''''b''' to: 'a''''b' ! testEvenNumber @@ -74,13 +72,13 @@ "S ::= if C then S else S | if C then S | X" | start if then else cond expr parser | - start := PPUnresolvedParser new. + start := PPDelegateParser new. if := 'if' asParser token trim. then := 'then' asParser token trim. else := 'else' asParser token trim. cond := 'C' asParser token trim. expr := 'X' asParser token trim. - start def: (if , cond , then , start , else , start) / (if , cond , then , start) / expr. + start setParser: (if , cond , then , start , else , start) / (if , cond , then , start) / expr. parser := start end. self assert: parser parse: 'X'. self assert: parser parse: 'if C then X'. @@ -98,8 +96,8 @@ "S ::= S 'x' S / '1'" | parser | - parser := PPUnresolvedParser new. - parser def: ((parser , $x asParser , parser) / $1 asParser) memoized flatten. + parser := PPDelegateParser new. + parser setParser: ((parser , $x asParser , parser) / $1 asParser) memoized flatten. self assert: parser parse: '1' to: '1'. self assert: parser parse: '1x1' to: '1x1'. @@ -113,8 +111,8 @@ "S ::= S , number | number" | number list parser | - number := #digit asParser plus token trim - ==> [ :node | node value asInteger ]. + number := #digit asParser plus flatten trim + ==> [ :node | node asInteger ]. list := (number separatedBy: $, asParser token trim) ==> [ :node | node select: [ :each | each isInteger ] ]. parser := list end. @@ -144,24 +142,24 @@ ! testNestedComments - "C ::= B I* E" - "I ::= !!E (C | T)" - "B ::= /*" - "E ::= */" - "T ::= ." - - | begin end any inside parser | - begin := '/*' asParser. - end := '*/' asParser. - any := #any asParser. - - parser := PPUnresolvedParser new. - inside := end not , (parser / any). - parser def: begin , inside star , end. - - self assert: parser parse: '/*ab*/cd' end: 6. - self assert: parser parse: '/*a/*b*/c*/'. - self assert: parser fail: '/*a/*b*/c' + "C ::= B I* E" + "I ::= !!E (C | T)" + "B ::= /*" + "E ::= */" + "T ::= ." + + | begin end any inside parser | + begin := '/*' asParser. + end := '*/' asParser. + any := #any asParser. + + parser := PPDelegateParser new. + inside := end not , (parser / any). + parser setParser: begin , inside star , end. + + self assert: parser parse: '/*ab*/cd' end: 6. + self assert: parser parse: '/*a/*b*/c*/'. + self assert: parser fail: '/*a/*b*/c' ! testPalindrome @@ -169,12 +167,12 @@ S1 ::= S0 | epsilon" | s0 s1 parser | - s0 := PPUnresolvedParser new. - s1 := PPUnresolvedParser new. - s0 def: ($a asParser , s1 , $a asParser) + s0 := PPDelegateParser new. + s1 := PPDelegateParser new. + s0 setParser: ($a asParser , s1 , $a asParser) / ($b asParser , s1 , $b asParser) / ($c asParser , s1 , $c asParser). - s1 def: s0 / nil asParser. + s1 setParser: s0 / nil asParser. parser := s0 flatten end. self assert: parser parse: 'aa' to: 'aa'. @@ -199,10 +197,10 @@ S1 ::= S0 | epsilon" | s0 s1 parser | - s0 := PPUnresolvedParser new. - s1 := PPUnresolvedParser new. - s0 def: $a asParser , s1 , $b asParser. - s1 def: s0 / nil asParser. + s0 := PPDelegateParser new. + s1 := PPDelegateParser new. + s0 setParser: $a asParser , s1 , $b asParser. + s1 setParser: s0 / nil asParser. parser := s0 flatten. self assert: parser parse: 'ab' to: 'ab'. @@ -225,9 +223,9 @@ "S ::= a a S | epsilon" | s0 s1 parser | - s0 := PPUnresolvedParser new. + s0 := PPDelegateParser new. s1 := $a asParser , $a asParser , s0. - s0 def: s1 / nil asParser. + s0 setParser: s1 / nil asParser. parser := s0 flatten. self assert: parser parse: '' to: ''. @@ -302,17 +300,17 @@ BC <- 'b' BC 'c' / epsilon" | s p1 ab p2 bc | - s := PPUnresolvedParser new. - p1 := PPUnresolvedParser new. - ab := PPUnresolvedParser new. - p2 := PPUnresolvedParser new. - bc := PPUnresolvedParser new. + s := PPDelegateParser new. + p1 := PPDelegateParser new. + ab := PPDelegateParser new. + p2 := PPDelegateParser new. + bc := PPDelegateParser new. - s def: (p1 and , p2 end) flatten. - p1 def: ab , $c asParser. - ab def: ($a asParser , ab , $b asParser) optional. - p2 def: $a asParser star , bc. - bc def: ($b asParser , bc , $c asParser) optional. + s setParser: (p1 and , p2 end) flatten. + p1 setParser: ab , $c asParser. + ab setParser: ($a asParser , ab , $b asParser) optional. + p2 setParser: $a asParser star , bc. + bc setParser: ($b asParser , bc , $c asParser) optional. self assert: s parse: 'abc' to: 'abc'. self assert: s parse: 'aabbcc' to: 'aabbcc'. @@ -388,10 +386,10 @@ testReturn | number spaces return | - number := #digit asParser plus token. + number := #digit asParser plus flatten. spaces := #space asParser star. return := (spaces , $^ asParser token , spaces , number) - ==> [ :nodes | Array with: #return with: (nodes at: 4) value ]. + ==> [ :nodes | Array with: #return with: (nodes at: 4) ]. self assert: return parse: '^1' to: #(return '1'). self assert: return parse: '^12' to: #(return '12'). @@ -405,13 +403,14 @@ !PPComposedTest class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPComposedTest.st,v 1.4 2012-12-01 15:10:15 cg Exp $' + ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPComposedTest.st,v 1.5 2014-03-04 14:34:10 cg Exp $' ! version_CVS - ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPComposedTest.st,v 1.4 2012-12-01 15:10:15 cg Exp $' + ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPComposedTest.st,v 1.5 2014-03-04 14:34:10 cg Exp $' ! version_SVN - ^ '§Id: PPComposedTest.st 4 2010-12-18 17:02:23Z kursjan §' + ^ '$Id: PPComposedTest.st,v 1.5 2014-03-04 14:34:10 cg Exp $' ! ! +