]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix peg tests
authorChris Double <chris@bethia.(none)>
Fri, 4 Jul 2008 02:20:19 +0000 (14:20 +1200)
committerChris Double <chris@bethia.(none)>
Thu, 10 Jul 2008 01:56:06 +0000 (13:56 +1200)
extra/peg/ebnf/ebnf-tests.factor
extra/peg/ebnf/ebnf.factor
extra/peg/parsers/parsers-tests.factor
extra/peg/parsers/parsers.factor
extra/peg/peg-tests.factor
extra/peg/peg.factor
extra/peg/pl0/pl0-tests.factor
extra/peg/search/search.factor

index ba3424815966c735f3657c3ea4307fd2b359937f..ef90929b79f8bcd2677d0773446b9a2d4f369548 100644 (file)
@@ -7,11 +7,11 @@ USING: kernel tools.test peg peg.ebnf words math math.parser
 IN: peg.ebnf.tests
 
 { T{ ebnf-non-terminal f "abc" } } [
-  "abc" 'non-terminal' parse ast>> 
+  "abc" 'non-terminal' parse 
 ] unit-test
 
 { T{ ebnf-terminal f "55" } } [
-  "'55'" 'terminal' parse ast>> 
+  "'55'" 'terminal' parse 
 ] unit-test
 
 {
@@ -22,7 +22,7 @@ IN: peg.ebnf.tests
      }
   } 
 } [
-  "digit = '1' | '2'" 'rule' parse ast>>
+  "digit = '1' | '2'" 'rule' parse
 ] unit-test
 
 {
@@ -33,7 +33,7 @@ IN: peg.ebnf.tests
      }
   }   
 } [
-  "digit = '1' '2'" 'rule' parse ast>>
+  "digit = '1' '2'" 'rule' parse
 ] unit-test
 
 {
@@ -46,7 +46,7 @@ IN: peg.ebnf.tests
      }
   } 
 } [
-  "one two | three" 'choice' parse ast>>
+  "one two | three" 'choice' parse
 ] unit-test
 
 {
@@ -61,7 +61,7 @@ IN: peg.ebnf.tests
      }
   } 
 } [
-  "one {two | three}" 'choice' parse ast>>
+  "one {two | three}" 'choice' parse
 ] unit-test
 
 {
@@ -81,7 +81,7 @@ IN: peg.ebnf.tests
      }
   } 
 } [
-  "one ((two | three) four)*" 'choice' parse ast>>
+  "one ((two | three) four)*" 'choice' parse
 ] unit-test
 
 {
@@ -93,23 +93,23 @@ IN: peg.ebnf.tests
      }
   } 
 } [
-  "one ( two )? three" 'choice' parse ast>>
+  "one ( two )? three" 'choice' parse
 ] unit-test
 
 { "foo" } [
-  "\"foo\"" 'identifier' parse ast>>
+  "\"foo\"" 'identifier' parse
 ] unit-test
 
 { "foo" } [
-  "'foo'" 'identifier' parse ast>>
+  "'foo'" 'identifier' parse
 ] unit-test
 
 { "foo" } [
-  "foo" 'non-terminal' parse ast>> ebnf-non-terminal-symbol
+  "foo" 'non-terminal' parse ebnf-non-terminal-symbol
 ] unit-test
 
 { "foo" } [
-  "foo]" 'non-terminal' parse ast>> ebnf-non-terminal-symbol
+  "foo]" 'non-terminal' parse ebnf-non-terminal-symbol
 ] unit-test
 
 { V{ "a" "b" } } [
@@ -252,7 +252,7 @@ IN: peg.ebnf.tests
 ] unit-test
 
 { t } [
-  "abcd='9' | ('8'):x => [[ x ]]" 'ebnf' parse parse-result-remaining empty?
+  "abcd='9' | ('8'):x => [[ x ]]" 'ebnf' (parse) remaining>> empty?
 ] unit-test
 
 EBNF: primary 
@@ -385,29 +385,29 @@ main = Primary
 ] unit-test
 
 { t } [
-  "number=(digit)+:n 'a'" 'ebnf' parse remaining>> length zero?
+  "number=(digit)+:n 'a'" 'ebnf' (parse) remaining>> length zero?
 ] unit-test
 
 { t } [
-  "number=(digit)+ 'a'" 'ebnf' parse remaining>> length zero?
+  "number=(digit)+ 'a'" 'ebnf' (parse) remaining>> length zero?
 ] unit-test
 
 { t } [
-  "number=digit+ 'a'" 'ebnf' parse remaining>> length zero?
+  "number=digit+ 'a'" 'ebnf' (parse) remaining>> length zero?
 ] unit-test
 
 { t } [
-  "number=digit+:n 'a'" 'ebnf' parse remaining>> length zero?
+  "number=digit+:n 'a'" 'ebnf' (parse) remaining>> length zero?
 ] unit-test
 
 { t } [
-  "foo=(name):n !(keyword) => [[ n ]]" 'rule' parse ast>>
-  "foo=name:n !(keyword) => [[ n ]]" 'rule' parse ast>> =
+  "foo=(name):n !(keyword) => [[ n ]]" 'rule' parse
+  "foo=name:n !(keyword) => [[ n ]]" 'rule' parse =
 ] unit-test
 
 { t } [
-  "foo=!(keyword) (name):n => [[ n ]]" 'rule' parse ast>>
-  "foo=!(keyword) name:n => [[ n ]]" 'rule' parse ast>> =
+  "foo=!(keyword) (name):n => [[ n ]]" 'rule' parse
+  "foo=!(keyword) name:n => [[ n ]]" 'rule' parse =
 ] unit-test
 
 <<
@@ -455,7 +455,7 @@ foo=<foreign any-char> 'd'
 { t } [
   #! Rule lookup occurs in a namespace. This causes an incorrect duplicate rule
   #! if a var in a namespace is set. This unit test is to remind me to fix this.
-  [ "fail" "foo" set "foo='a'" 'ebnf' parse ast>> transform drop t ] with-scope
+  [ "fail" "foo" set "foo='a'" 'ebnf' parse transform drop t ] with-scope
 ] unit-test
 
 #! Tokenizer tests
index ff4bd2db61c94e7af58aaa6330ccf2f117d61f58..2a57015fa6b80f858c99850d1e8d4850ac046615 100644 (file)
@@ -504,7 +504,7 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
   ] [ ] make box ;\r
 \r
 : transform-ebnf ( string -- object )\r
-  'ebnf' parse parse-result-ast transform ;\r
+  'ebnf' parse transform ;\r
 \r
 : check-parse-result ( result -- result )\r
   dup [\r
@@ -519,7 +519,7 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
   ] if ;\r
 \r
 : parse-ebnf ( string -- hashtable )\r
-  'ebnf' parse check-parse-result ast>> transform ;\r
+  'ebnf' (parse) check-parse-result ast>> transform ;\r
 \r
 : ebnf>quot ( string -- hashtable quot )\r
   parse-ebnf dup dup parser [ main swap at compile ] with-variable\r
index 0cf3ad8b17f4d599faa8398032fbd1c83a6be8f8..20d19c9a6444c5aeae2041723fcbdb79e4b234ac 100644 (file)
@@ -2,50 +2,50 @@ USING: kernel peg peg.parsers tools.test accessors ;
 IN: peg.parsers.tests
 
 { V{ "a" } }
-[ "a" "a" token "," token list-of parse ast>> ] unit-test
+[ "a" "a" token "," token list-of parse ] unit-test
 
 { V{ "a" "a" "a" "a" } }
-[ "a,a,a,a" "a" token "," token list-of parse ast>> ] unit-test
+[ "a,a,a,a" "a" token "," token list-of parse ] unit-test
 
 [ "a" "a" token "," token list-of-many parse ] must-fail
 
 { V{ "a" "a" "a" "a" } }
-[ "a,a,a,a" "a" token "," token list-of-many parse ast>> ] unit-test
+[ "a,a,a,a" "a" token "," token list-of-many parse ] unit-test
 
 [ "aaa" "a" token 4 exactly-n parse ] must-fail
 
 { V{ "a" "a" "a" "a" } }
-[ "aaaa" "a" token 4 exactly-n parse ast>> ] unit-test
+[ "aaaa" "a" token 4 exactly-n parse ] unit-test
 
 [ "aaa" "a" token 4 at-least-n parse ] must-fail
 
 { V{ "a" "a" "a" "a" } }
-[ "aaaa" "a" token 4 at-least-n parse ast>> ] unit-test
+[ "aaaa" "a" token 4 at-least-n parse ] unit-test
 
 { V{ "a" "a" "a" "a" "a" } }
-[ "aaaaa" "a" token 4 at-least-n parse ast>> ] unit-test
+[ "aaaaa" "a" token 4 at-least-n parse ] unit-test
 
 { V{ "a" "a" "a" "a" } }
-[ "aaaa" "a" token 4 at-most-n parse ast>> ] unit-test
+[ "aaaa" "a" token 4 at-most-n parse ] unit-test
 
 { V{ "a" "a" "a" "a" } }
-[ "aaaaa" "a" token 4 at-most-n parse ast>> ] unit-test
+[ "aaaaa" "a" token 4 at-most-n parse ] unit-test
 
 { V{ "a" "a" "a" } }
-[ "aaa" "a" token 3 4 from-m-to-n parse ast>> ] unit-test
+[ "aaa" "a" token 3 4 from-m-to-n parse ] unit-test
 
 { V{ "a" "a" "a" "a" } }
-[ "aaaa" "a" token 3 4 from-m-to-n parse ast>> ] unit-test
+[ "aaaa" "a" token 3 4 from-m-to-n parse ] unit-test
 
 { V{ "a" "a" "a" "a" } }
-[ "aaaaa" "a" token 3 4 from-m-to-n parse ast>> ] unit-test
+[ "aaaaa" "a" token 3 4 from-m-to-n parse ] unit-test
 
 { 97 }
-[ "a" any-char parse ast>> ] unit-test
+[ "a" any-char parse ] unit-test
 
 { V{ } }
-[ "" epsilon parse ast>> ] unit-test
+[ "" epsilon parse ] unit-test
 
 { "a" } [
-  "a" "a" token just parse ast>>
+  "a" "a" token just parse
 ] unit-test
\ No newline at end of file
index da44c12e8f676cd788c9a12bc8d10482953431fd..351e3b5fc1ac607fa2dc55e1a8f7fc304f49ffab 100755 (executable)
@@ -3,7 +3,7 @@
 USING: kernel sequences strings namespaces math assocs shuffle 
      vectors arrays math.parser 
      unicode.categories sequences.deep peg peg.private 
-     peg.search math.ranges words memoize ;
+     peg.search math.ranges words ;
 IN: peg.parsers
 
 TUPLE: just-parser p1 ;
@@ -19,7 +19,7 @@ TUPLE: just-parser p1 ;
 M: just-parser (compile) ( parser -- quot )
   just-parser-p1 compiled-parser just-pattern curry ;
 
-MEMO: just ( parser -- parser )
+: just ( parser -- parser )
   just-parser boa init-parser ;
 
 : 1token ( ch -- parser ) 1string token ;
@@ -45,10 +45,10 @@ MEMO: just ( parser -- parser )
 
 PRIVATE>
 
-MEMO: exactly-n ( parser n -- parser' )
+: exactly-n ( parser n -- parser' )
   swap <repetition> seq ;
 
-MEMO: at-most-n ( parser n -- parser' )
+: at-most-n ( parser n -- parser' )
   dup zero? [
     2drop epsilon
   ] [
@@ -56,15 +56,15 @@ MEMO: at-most-n ( parser n -- parser' )
     -rot 1- at-most-n 2choice
   ] if ;
 
-MEMO: at-least-n ( parser n -- parser' )
+: at-least-n ( parser n -- parser' )
   dupd exactly-n swap repeat0 2seq
   [ flatten-vectors ] action ;
 
-MEMO: from-m-to-n ( parser m n -- parser' )
+: from-m-to-n ( parser m n -- parser' )
   >r [ exactly-n ] 2keep r> swap - at-most-n 2seq
   [ flatten-vectors ] action ;
 
-MEMO: pack ( begin body end -- parser )
+: pack ( begin body end -- parser )
   >r >r hide r> r> hide 3seq [ first ] action ;
 
 : surrounded-by ( parser begin end -- parser' )
index 466da83b6e318108bead428a0f698a5722e9609d..f9e4a0d4a628f95b9c67a9b12ab745e907619397 100644 (file)
@@ -10,7 +10,7 @@ IN: peg.tests
 ] must-fail
 
 { "begin" "end" } [
-  "beginend" "begin" token parse 
+  "beginend" "begin" token (parse) 
   { ast>> remaining>> } get-slots
   >string
 ] unit-test
@@ -24,11 +24,11 @@ IN: peg.tests
 ] must-fail
 
 { CHAR: a } [
-  "abcd" CHAR: a CHAR: z range parse ast>>
+  "abcd" CHAR: a CHAR: z range parse
 ] unit-test
 
 { CHAR: z } [
-  "zbcd" CHAR: a CHAR: z range parse ast>>
+  "zbcd" CHAR: a CHAR: z range parse
 ] unit-test
 
 [
@@ -36,15 +36,15 @@ IN: peg.tests
 ] must-fail
 
 { V{ "g" "o" } } [
-  "good" "g" token "o" token 2array seq parse ast>>
+  "good" "g" token "o" token 2array seq parse
 ] unit-test
 
 { "a" } [
-  "abcd" "a" token "b" token 2array choice parse ast>>
+  "abcd" "a" token "b" token 2array choice parse
 ] unit-test
 
 { "b" } [
-  "bbcd" "a" token "b" token 2array choice parse ast>>
+  "bbcd" "a" token "b" token 2array choice parse
 ] unit-test
 
 [
@@ -56,15 +56,15 @@ IN: peg.tests
 ] must-fail
 
 { 0 } [
-  "" "a" token repeat0 parse ast>> length
+  "" "a" token repeat0 parse length
 ] unit-test
 
 { 0 } [
-  "b" "a" token repeat0 parse ast>> length
+  "b" "a" token repeat0 parse length
 ] unit-test
 
 { V{ "a" "a" "a" } } [
-  "aaab" "a" token repeat0 parse ast>> 
+  "aaab" "a" token repeat0 parse 
 ] unit-test
 
 [
@@ -76,15 +76,15 @@ IN: peg.tests
 ] must-fail
 
 { V{ "a" "a" "a" } } [
-  "aaab" "a" token repeat1 parse ast>>
+  "aaab" "a" token repeat1 parse
 ] unit-test
 
 { V{ "a" "b" } } [ 
-  "ab" "a" token optional "b" token 2array seq parse ast>> 
+  "ab" "a" token optional "b" token 2array seq parse 
 ] unit-test
 
 { V{ f "b" } } [ 
-  "b" "a" token optional "b" token 2array seq parse ast>> 
+  "b" "a" token optional "b" token 2array seq parse 
 ] unit-test
 
 [ 
@@ -92,7 +92,7 @@ IN: peg.tests
 ] must-fail
 
 { V{ CHAR: a CHAR: b } } [
-  "ab" "a" token ensure CHAR: a CHAR: z range dup 3array seq parse ast>>
+  "ab" "a" token ensure CHAR: a CHAR: z range dup 3array seq parse
 ] unit-test
 
 [
@@ -124,11 +124,11 @@ IN: peg.tests
 ] must-fail
 
 { 1 } [
-  "a" "a" token [ drop 1 ] action parse ast>> 
+  "a" "a" token [ drop 1 ] action parse 
 ] unit-test
 
 { V{ 1 1 } } [
-  "aa" "a" token [ drop 1 ] action dup 2array seq parse ast>> 
+  "aa" "a" token [ drop 1 ] action dup 2array seq parse 
 ] unit-test
 
 [
@@ -140,19 +140,19 @@ IN: peg.tests
 ] must-fail
 
 { CHAR: a } [ 
-  "a" [ CHAR: a = ] satisfy parse ast>>
+  "a" [ CHAR: a = ] satisfy parse
 ] unit-test
 
 { "a" } [
-  "    a" "a" token sp parse ast>>
+  "    a" "a" token sp parse
 ] unit-test
 
 { "a" } [
-  "a" "a" token sp parse ast>>
+  "a" "a" token sp parse
 ] unit-test
 
 { V{ "a" } } [
-  "[a]" "[" token hide "a" token "]" token hide 3array seq parse ast>>
+  "[a]" "[" token hide "a" token "]" token hide 3array seq parse
 ] unit-test
 
 [
@@ -165,8 +165,8 @@ IN: peg.tests
     [ "1" token , "-" token , "1" token , ] seq* ,
     [ "1" token , "+" token , "1" token , ] seq* ,
   ] choice* 
-  "1-1" over parse ast>> swap
-  "1+1" swap parse ast>>
+  "1-1" over parse swap
+  "1+1" swap parse
 ] unit-test
 
 : expr ( -- parser ) 
@@ -175,7 +175,7 @@ IN: peg.tests
   [ expr ] delay "+" token "1" token 3seq "1" token 2choice ;
 
 { V{ V{ "1" "+" "1" } "+" "1" } } [
-  "1+1+1" expr parse ast>>   
+  "1+1+1" expr parse   
 ] unit-test
 
 { t } [
@@ -190,6 +190,6 @@ IN: peg.tests
 ] must-fail
 
 { CHAR: B } [
-  "B" [ drop t ] satisfy [ 66 >= ] semantic parse ast>>
+  "B" [ drop t ] satisfy [ 66 >= ] semantic parse
 ] unit-test
 
index d388bbd124a38b268f69d4829b5c2055dc2c8194..0847c572992ec60f3f5e5af93f09aa1a66b67e82 100755 (executable)
@@ -286,9 +286,12 @@ SYMBOL: delayed
 : compiled-parse ( state word -- result )
   swap [ execute [ error-stack get first throw ] unless* ] with-packrat ; inline 
 
-: parse ( input parser -- result )
+: (parse) ( input parser -- result )
   dup word? [ compile ] unless compiled-parse ;
 
+: parse ( input parser -- ast )
+  (parse) ast>> ;
+
 <PRIVATE
 
 SYMBOL: id 
index e1d97bdef90afd1dcb68109b8fb4301f590350a0..4ba550a26cee4f7047b143cac2d9ebfc78c78f66 100644 (file)
@@ -6,39 +6,39 @@ USING: kernel tools.test peg peg.ebnf peg.pl0
 IN: peg.pl0.tests
 
 { t } [
-  "CONST foo = 1;" "block" \ pl0 rule parse remaining>> empty? 
+  "CONST foo = 1;" "block" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "VAR foo;" "block" \ pl0 rule parse remaining>> empty?
+  "VAR foo;" "block" \ pl0 rule (parse) remaining>> empty?
 ] unit-test
 
 { t } [
-  "VAR foo,bar , baz;" "block" \ pl0 rule parse remaining>> empty? 
+  "VAR foo,bar , baz;" "block" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "foo := 5" "statement" \ pl0 rule parse remaining>> empty? 
+  "foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "BEGIN foo := 5 END" "statement" \ pl0 rule parse remaining>> empty? 
+  "BEGIN foo := 5 END" "statement" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "IF 1=1 THEN foo := 5" "statement" \ pl0 rule parse remaining>> empty? 
+  "IF 1=1 THEN foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "WHILE 1=1 DO foo := 5" "statement" \ pl0 rule parse remaining>> empty? 
+  "WHILE 1=1 DO foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "WHILE ODD 1 DO foo := 5" "statement" \ pl0 rule parse remaining>> empty? 
+  "WHILE ODD 1 DO foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
-  "PROCEDURE square; BEGIN squ:=x*x END" "block" \ pl0 rule parse remaining>> empty? 
+  "PROCEDURE square; BEGIN squ:=x*x END" "block" \ pl0 rule (parse) remaining>> empty? 
 ] unit-test
 
 { t } [
index 7ab7e83d124da616178174508a36e4205e5e7a53..04e4affe39496333e97443f441193cdbbf7e5bdd 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2006 Chris Double.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel math io io.streams.string sequences strings
-combinators peg memoize arrays ;
+combinators peg memoize arrays continuations ;
 IN: peg.search
 
 : tree-write ( object -- )
@@ -16,15 +16,12 @@ MEMO: any-char-parser ( -- parser )
   [ drop t ] satisfy ;
 
 : search ( string parser -- seq )
-  any-char-parser [ drop f ] action 2array choice repeat0 parse dup [
-    parse-result-ast sift
-  ] [
-    drop { }
-  ] if ;
+  any-char-parser [ drop f ] action 2array choice repeat0 
+  [ parse sift ] [ 3drop { } ] recover ;
 
 
 : (replace) ( string parser -- seq )
-  any-char-parser 2array choice repeat0 parse parse-result-ast sift ;
+  any-char-parser 2array choice repeat0 parse sift ;
 
 : replace ( string parser -- result )
  [  (replace) [ tree-write ] each ] with-string-writer ;