| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ! Copyright (C) 2007 Chris Double. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | !
 | 
					
						
							| 
									
										
										
										
											2007-11-26 18:22:33 -05:00
										 |  |  | USING: kernel tools.test strings namespaces arrays sequences peg peg.private ;
 | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | IN: temporary | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 0 1 2 } [ | 
					
						
							|  |  |  |   0 next-id set-global get-next-id get-next-id get-next-id  | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "endbegin" "begin" token parse | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-20 21:31:23 -05:00
										 |  |  | { "begin" "end" } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "beginend" "begin" token parse  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:31:23 -05:00
										 |  |  |   { parse-result-ast parse-result-remaining } get-slots | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   >string
 | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "" CHAR: a CHAR: z range parse | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "1bcd" CHAR: a CHAR: z range parse | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { CHAR: a } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "abcd" CHAR: a CHAR: z range parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { CHAR: z } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "zbcd" CHAR: a CHAR: z range parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "bad" "a" token "b" token 2array seq parse | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-20 21:31:23 -05:00
										 |  |  | { V{ "g" "o" } } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "good" "g" token "o" token 2array seq parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-19 22:36:38 -05:00
										 |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2007-11-19 23:58:11 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | { "a" } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "abcd" "a" token "b" token 2array choice parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-19 23:58:11 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { "b" } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "bbcd" "a" token "b" token 2array choice parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-19 23:58:11 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "cbcd" "a" token "b" token 2array choice parse  | 
					
						
							| 
									
										
										
										
											2007-11-19 23:58:11 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "" "a" token "b" token 2array choice parse  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 0 } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "" "a" token repeat0 parse parse-result-ast length
 | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 0 } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "b" "a" token repeat0 parse parse-result-ast length
 | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-20 21:31:23 -05:00
										 |  |  | { V{ "a" "a" "a" } } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "aaab" "a" token repeat0 parse parse-result-ast  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "" "a" token repeat1 parse  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "b" "a" token repeat1 parse  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-20 21:31:23 -05:00
										 |  |  | { V{ "a" "a" "a" } } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "aaab" "a" token repeat1 parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-20 21:01:44 -05:00
										 |  |  | ] unit-test | 
					
						
							| 
									
										
										
										
											2007-11-20 21:50:47 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | { V{ "a" "b" } } [  | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "ab" "a" token optional "b" token 2array seq parse parse-result-ast  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:50:47 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { V{ f "b" } } [  | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "b" "a" token optional "b" token 2array seq parse parse-result-ast  | 
					
						
							| 
									
										
										
										
											2007-11-20 21:50:47 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [  | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "cb" "a" token optional "b" token 2array seq parse   | 
					
						
							| 
									
										
										
										
											2007-11-20 22:06:02 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { V{ CHAR: a CHAR: b } } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "ab" "a" token ensure CHAR: a CHAR: z range dup 3array seq parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-20 22:06:02 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "bb" "a" token ensure CHAR: a CHAR: z range 2array seq parse  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:11:49 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { t } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "a+b"  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:11:49 -05:00
										 |  |  |   "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq | 
					
						
							|  |  |  |   parse [ t ] [ f ] if
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { t } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "a++b"  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:11:49 -05:00
										 |  |  |   "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq | 
					
						
							|  |  |  |   parse [ t ] [ f ] if
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { t } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "a+b"  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:11:49 -05:00
										 |  |  |   "a" token "+" token "++" token 2array choice "b" token 3array seq | 
					
						
							|  |  |  |   parse [ t ] [ f ] if
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "a++b"  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:11:49 -05:00
										 |  |  |   "a" token "+" token "++" token 2array choice "b" token 3array seq | 
					
						
							|  |  |  |   parse [ t ] [ f ] if
 | 
					
						
							| 
									
										
										
										
											2007-11-20 22:21:23 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { 1 } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "a" "a" token [ drop 1 ] action parse parse-result-ast  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:21:23 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { V{ 1 1 } } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "aa" "a" token [ drop 1 ] action dup 2array seq parse parse-result-ast  | 
					
						
							| 
									
										
										
										
											2007-11-20 22:21:23 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							| 
									
										
										
										
											2007-11-26 17:57:08 -05:00
										 |  |  |   "b" "a" token [ drop 1 ] action parse  | 
					
						
							| 
									
										
										
										
											2007-11-26 21:08:16 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [  | 
					
						
							|  |  |  |   "b" [ CHAR: a = ] satisfy parse  | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { CHAR: a } [  | 
					
						
							|  |  |  |   "a" [ CHAR: a = ] satisfy parse parse-result-ast | 
					
						
							| 
									
										
										
										
											2007-11-26 21:45:00 -05:00
										 |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { "a" } [ | 
					
						
							|  |  |  |   "    a" "a" token sp parse parse-result-ast | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { "a" } [ | 
					
						
							|  |  |  |   "a" "a" token sp parse parse-result-ast | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { V{ "a" } } [ | 
					
						
							|  |  |  |   "[a]" "[" token hide "a" token "]" token hide 3array seq parse parse-result-ast | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { f } [ | 
					
						
							|  |  |  |   "a]" "[" token hide "a" token "]" token hide 3array seq parse  | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 |