add using
[factor/jcg.git] / core / effects / parser / parser.factor
blob6b7e953b6c18ee073ab8c6603adf0e0909db2135
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: lexer sets sequences kernel splitting effects
4 combinators arrays parser ;
5 IN: effects.parser
7 DEFER: parse-effect
9 ERROR: bad-effect ;
11 : parse-effect-token ( end -- token/f )
12     scan [ nip ] [ = ] 2bi [ drop f ] [
13         dup { f "(" "((" } member? [ bad-effect ] [
14             ":" ?tail [
15                 scan-word {
16                     { \ ( [ ")" parse-effect ] }
17                     [ ]
18                 } case 2array
19             ] when
20         ] if
21     ] if ;
23 : parse-effect-tokens ( end -- tokens )
24     [ parse-effect-token dup ] curry [ ] [ drop ] produce ;
26 : parse-effect ( end -- effect )
27     parse-effect-tokens { "--" } split1 dup
28     [ <effect> ] [ "Stack effect declaration must contain --" throw ] if ;