From 2a464ea2c65bb14782066b00789b63567a77c308 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 16:11:49 +1300 Subject: [PATCH] add ensure-not parser --- extra/peg/peg-tests.factor | 24 ++++++++++++++++++++++++ extra/peg/peg.factor | 12 ++++++++++++ 2 files changed, 36 insertions(+) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index b7977285c4..94f70d32ad 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -112,4 +112,28 @@ IN: temporary { f } [ "bb" 0 "a" token ensure CHAR: a CHAR: z range 2array seq parse +] unit-test + +{ t } [ + "a+b" 0 + "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if +] unit-test + +{ t } [ + "a++b" 0 + "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if +] unit-test + +{ t } [ + "a+b" 0 + "a" token "+" token "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if +] unit-test + +{ f } [ + "a++b" 0 + "a" token "+" token "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if ] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 239af02d26..82c4505ae7 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -162,3 +162,15 @@ M: ensure-parser parse ( state parser -- result ) : ensure ( parser -- parser ) ensure-parser construct-boa init-parser ; + +TUPLE: ensure-not-parser p1 ; + +M: ensure-not-parser parse ( state parser -- result ) + dupd ensure-not-parser-p1 parse [ + drop f + ] [ + ignore + ] if ; + +: ensure-not ( parser -- parser ) + ensure-not-parser construct-boa init-parser ;