Changing : foo ; parsing to SYNTAX: foo ;

db4
Slava Pestov 2009-03-21 01:27:50 -05:00
parent f73f4e6293
commit ea60f8ae93
81 changed files with 328 additions and 335 deletions

View File

@ -26,4 +26,4 @@ M: F-destructor dispose* alien>> F ;
;FUNCTOR ;FUNCTOR
: DESTRUCTOR: scan-word define-destructor ; parsing SYNTAX: DESTRUCTOR: scan-word define-destructor ;

View File

@ -416,7 +416,7 @@ PRIVATE>
: define-fortran-record ( name vocab fields -- ) : define-fortran-record ( name vocab fields -- )
[ >lower ] [ ] [ fortran-record>c-struct ] tri* define-struct ; [ >lower ] [ ] [ fortran-record>c-struct ] tri* define-struct ;
: RECORD: scan in get parse-definition define-fortran-record ; parsing SYNTAX: RECORD: scan in get parse-definition define-fortran-record ;
: set-fortran-abi ( library -- ) : set-fortran-abi ( library -- )
library-fortran-abis get-global at fortran-abi set ; library-fortran-abis get-global at fortran-abi set ;
@ -437,16 +437,16 @@ MACRO: fortran-invoke ( return library function parameters -- )
return library function parameters return [ "void" ] unless* parse-arglist return library function parameters return [ "void" ] unless* parse-arglist
[ \ fortran-invoke 5 [ ] nsequence ] dip define-declared ; [ \ fortran-invoke 5 [ ] nsequence ] dip define-declared ;
: SUBROUTINE: SYNTAX: SUBROUTINE:
f "c-library" get scan ";" parse-tokens f "c-library" get scan ";" parse-tokens
[ "()" subseq? not ] filter define-fortran-function ; parsing [ "()" subseq? not ] filter define-fortran-function ;
: FUNCTION: SYNTAX: FUNCTION:
scan "c-library" get scan ";" parse-tokens scan "c-library" get scan ";" parse-tokens
[ "()" subseq? not ] filter define-fortran-function ; parsing [ "()" subseq? not ] filter define-fortran-function ;
: LIBRARY: SYNTAX: LIBRARY:
scan scan
[ "c-library" set ] [ "c-library" set ]
[ set-fortran-abi ] bi ; parsing [ set-fortran-abi ] bi ;

View File

@ -7,35 +7,34 @@ effects assocs combinators lexer strings.parser alien.parser
fry vocabs.parser words.constant ; fry vocabs.parser words.constant ;
IN: alien.syntax IN: alien.syntax
: DLL" lexer get skip-blank parse-string dlopen parsed ; parsing SYNTAX: DLL" lexer get skip-blank parse-string dlopen parsed ;
: ALIEN: scan string>number <alien> parsed ; parsing SYNTAX: ALIEN: scan string>number <alien> parsed ;
: BAD-ALIEN <bad-alien> parsed ; parsing SYNTAX: BAD-ALIEN <bad-alien> parsed ;
: LIBRARY: scan "c-library" set ; parsing SYNTAX: LIBRARY: scan "c-library" set ;
: FUNCTION: SYNTAX: FUNCTION:
scan "c-library" get scan ";" parse-tokens scan "c-library" get scan ";" parse-tokens
[ "()" subseq? not ] filter [ "()" subseq? not ] filter
define-function ; parsing define-function ;
: TYPEDEF: SYNTAX: TYPEDEF:
scan scan typedef ; parsing scan scan typedef ;
: C-STRUCT: SYNTAX: C-STRUCT:
scan in get parse-definition define-struct ; parsing scan in get parse-definition define-struct ;
: C-UNION: SYNTAX: C-UNION:
scan parse-definition define-union ; parsing scan parse-definition define-union ;
: C-ENUM: SYNTAX: C-ENUM:
";" parse-tokens ";" parse-tokens
[ [ create-in ] dip define-constant ] each-index ; [ [ create-in ] dip define-constant ] each-index ;
parsing
: address-of ( name library -- value ) : address-of ( name library -- value )
load-library dlsym [ "No such symbol" throw ] unless* ; load-library dlsym [ "No such symbol" throw ] unless* ;
: &: SYNTAX: &:
scan "c-library" get '[ _ _ address-of ] over push-all ; parsing scan "c-library" get '[ _ _ address-of ] over push-all ;

View File

@ -68,7 +68,7 @@ M: bit-array resize
M: bit-array byte-length length 7 + -3 shift ; M: bit-array byte-length length 7 + -3 shift ;
: ?{ \ } [ >bit-array ] parse-literal ; parsing SYNTAX: ?{ \ } [ >bit-array ] parse-literal ;
: integer>bit-array ( n -- bit-array ) : integer>bit-array ( n -- bit-array )
dup 0 = [ dup 0 = [

View File

@ -31,7 +31,7 @@ M: bit-array new-resizable drop <bit-vector> ;
INSTANCE: bit-vector growable INSTANCE: bit-vector growable
: ?V{ \ } [ >bit-vector ] parse-literal ; parsing SYNTAX: ?V{ \ } [ >bit-vector ] parse-literal ;
M: bit-vector >pprint-sequence ; M: bit-vector >pprint-sequence ;
M: bit-vector pprint-delims drop \ ?V{ \ } ; M: bit-vector pprint-delims drop \ ?V{ \ } ;

View File

@ -42,7 +42,7 @@ M: byte-array like
M: byte-array new-resizable drop <byte-vector> ; M: byte-array new-resizable drop <byte-vector> ;
: BV{ \ } [ >byte-vector ] parse-literal ; parsing SYNTAX: BV{ \ } [ >byte-vector ] parse-literal ;
M: byte-vector pprint* pprint-object ; M: byte-vector pprint* pprint-object ;
M: byte-vector pprint-delims drop \ BV{ \ } ; M: byte-vector pprint-delims drop \ BV{ \ } ;

View File

@ -14,18 +14,14 @@ SYMBOL: sent-messages
: remember-send ( selector -- ) : remember-send ( selector -- )
sent-messages (remember-send) ; sent-messages (remember-send) ;
: -> SYNTAX: -> scan dup remember-send parsed \ send parsed ;
scan dup remember-send parsed \ send parsed ;
parsing
SYMBOL: super-sent-messages SYMBOL: super-sent-messages
: remember-super-send ( selector -- ) : remember-super-send ( selector -- )
super-sent-messages (remember-send) ; super-sent-messages (remember-send) ;
: SUPER-> SYNTAX: SUPER-> scan dup remember-super-send parsed \ super-send parsed ;
scan dup remember-super-send parsed \ super-send parsed ;
parsing
SYMBOL: frameworks SYMBOL: frameworks
@ -33,9 +29,9 @@ frameworks [ V{ } clone ] initialize
[ frameworks get [ load-framework ] each ] "cocoa.messages" add-init-hook [ frameworks get [ load-framework ] each ] "cocoa.messages" add-init-hook
: FRAMEWORK: scan [ load-framework ] [ frameworks get push ] bi ; parsing SYNTAX: FRAMEWORK: scan [ load-framework ] [ frameworks get push ] bi ;
: IMPORT: scan [ ] import-objc-class ; parsing SYNTAX: IMPORT: scan [ ] import-objc-class ;
"Compiling Objective C bridge..." print "Compiling Objective C bridge..." print

View File

@ -76,6 +76,6 @@ SYMBOL: +superclass+
import-objc-class import-objc-class
] bind ; ] bind ;
: CLASS: SYNTAX: CLASS:
parse-definition unclip parse-definition unclip
>hashtable define-objc-class ; parsing >hashtable define-objc-class ;

View File

@ -30,4 +30,4 @@ ERROR: no-such-color name ;
: named-color ( name -- color ) : named-color ( name -- color )
dup rgb.txt at [ ] [ no-such-color ] ?if ; dup rgb.txt at [ ] [ no-such-color ] ?if ;
: COLOR: scan named-color parsed ; parsing SYNTAX: COLOR: scan named-color parsed ;

View File

@ -13,10 +13,10 @@ IN: compiler.cfg.instructions.syntax
: insn-effect ( word -- effect ) : insn-effect ( word -- effect )
boa-effect in>> but-last f <effect> ; boa-effect in>> but-last f <effect> ;
: INSN: SYNTAX: INSN:
parse-tuple-definition "regs" suffix parse-tuple-definition "regs" suffix
[ dup tuple eq? [ drop insn-word ] when ] dip [ dup tuple eq? [ drop insn-word ] when ] dip
[ define-tuple-class ] [ define-tuple-class ]
[ 2drop save-location ] [ 2drop save-location ]
[ 2drop [ ] [ '[ f _ boa , ] ] [ insn-effect ] tri define-inline ] [ 2drop [ ] [ '[ f _ boa , ] ] [ insn-effect ] tri define-inline ]
3tri ; parsing 3tri ;

View File

@ -17,6 +17,6 @@ C: <ds-loc> ds-loc
TUPLE: rs-loc < loc ; TUPLE: rs-loc < loc ;
C: <rs-loc> rs-loc C: <rs-loc> rs-loc
: V scan-word scan-word vreg boa parsed ; parsing SYNTAX: V scan-word scan-word vreg boa parsed ;
: D scan-word <ds-loc> parsed ; parsing SYNTAX: D scan-word <ds-loc> parsed ;
: R scan-word <rs-loc> parsed ; parsing SYNTAX: R scan-word <rs-loc> parsed ;

View File

@ -16,8 +16,8 @@ MACRO: set-slots ( slots -- quot )
[ [ in>> '[ _ _ construct ] ] dip compose ] [ drop ] 2bi [ [ in>> '[ _ _ construct ] ] dip compose ] [ drop ] 2bi
define-declared ; define-declared ;
: CONSTRUCTOR: SYNTAX: CONSTRUCTOR:
scan-word [ name>> "<" ">" surround create-in ] keep scan-word [ name>> "<" ">" surround create-in ] keep
"(" expect ")" parse-effect "(" expect ")" parse-effect
parse-definition parse-definition
define-constructor ; parsing define-constructor ;

View File

@ -3,7 +3,7 @@
USING: words parser alien alien.c-types kernel fry accessors ; USING: words parser alien alien.c-types kernel fry accessors ;
IN: core-text.utilities IN: core-text.utilities
: C-GLOBAL: SYNTAX: C-GLOBAL:
CREATE-WORD CREATE-WORD
dup name>> '[ _ f dlsym *void* ] dup name>> '[ _ f dlsym *void* ]
(( -- value )) define-declared ; parsing (( -- value )) define-declared ;

View File

@ -21,7 +21,7 @@ IN: cpu.ppc.assembler.backend
: define-d-insn ( word opcode -- ) : define-d-insn ( word opcode -- )
[ d-insn ] curry (( d a simm -- )) define-declared ; [ d-insn ] curry (( d a simm -- )) define-declared ;
: D: CREATE scan-word define-d-insn ; parsing SYNTAX: D: CREATE scan-word define-d-insn ;
: sd-insn ( d a simm opcode -- ) : sd-insn ( d a simm opcode -- )
[ s>u16 { 0 21 16 } bitfield ] dip insn ; [ s>u16 { 0 21 16 } bitfield ] dip insn ;
@ -29,7 +29,7 @@ IN: cpu.ppc.assembler.backend
: define-sd-insn ( word opcode -- ) : define-sd-insn ( word opcode -- )
[ sd-insn ] curry (( d a simm -- )) define-declared ; [ sd-insn ] curry (( d a simm -- )) define-declared ;
: SD: CREATE scan-word define-sd-insn ; parsing SYNTAX: SD: CREATE scan-word define-sd-insn ;
: i-insn ( li aa lk opcode -- ) : i-insn ( li aa lk opcode -- )
[ { 0 1 0 } bitfield ] dip insn ; [ { 0 1 0 } bitfield ] dip insn ;
@ -40,26 +40,26 @@ IN: cpu.ppc.assembler.backend
: (X) ( -- word quot ) : (X) ( -- word quot )
CREATE scan-word scan-word scan-word [ x-insn ] 3curry ; CREATE scan-word scan-word scan-word [ x-insn ] 3curry ;
: X: (X) (( a s b -- )) define-declared ; parsing SYNTAX: X: (X) (( a s b -- )) define-declared ;
: (1) ( quot -- quot' ) [ 0 ] prepose ; : (1) ( quot -- quot' ) [ 0 ] prepose ;
: X1: (X) (1) (( a s -- )) define-declared ; parsing SYNTAX: X1: (X) (1) (( a s -- )) define-declared ;
: xfx-insn ( d spr xo opcode -- ) : xfx-insn ( d spr xo opcode -- )
[ { 1 11 21 } bitfield ] dip insn ; [ { 1 11 21 } bitfield ] dip insn ;
: CREATE-MF ( -- word ) scan "MF" prepend create-in ; : CREATE-MF ( -- word ) scan "MF" prepend create-in ;
: MFSPR: SYNTAX: MFSPR:
CREATE-MF scan-word 5 shift [ 339 31 xfx-insn ] curry CREATE-MF scan-word 5 shift [ 339 31 xfx-insn ] curry
(( d -- )) define-declared ; parsing (( d -- )) define-declared ;
: CREATE-MT ( -- word ) scan "MT" prepend create-in ; : CREATE-MT ( -- word ) scan "MT" prepend create-in ;
: MTSPR: SYNTAX: MTSPR:
CREATE-MT scan-word 5 shift [ 467 31 xfx-insn ] curry CREATE-MT scan-word 5 shift [ 467 31 xfx-insn ] curry
(( d -- )) define-declared ; parsing (( d -- )) define-declared ;
: xo-insn ( d a b oe rc xo opcode -- ) : xo-insn ( d a b oe rc xo opcode -- )
[ { 1 0 10 11 16 21 } bitfield ] dip insn ; [ { 1 0 10 11 16 21 } bitfield ] dip insn ;
@ -68,9 +68,9 @@ IN: cpu.ppc.assembler.backend
CREATE scan-word scan-word scan-word scan-word CREATE scan-word scan-word scan-word scan-word
[ xo-insn ] 2curry 2curry ; [ xo-insn ] 2curry 2curry ;
: XO: (XO) (( a s b -- )) define-declared ; parsing SYNTAX: XO: (XO) (( a s b -- )) define-declared ;
: XO1: (XO) (1) (( a s -- )) define-declared ; parsing SYNTAX: XO1: (XO) (1) (( a s -- )) define-declared ;
GENERIC# (B) 2 ( dest aa lk -- ) GENERIC# (B) 2 ( dest aa lk -- )
M: integer (B) 18 i-insn ; M: integer (B) 18 i-insn ;
@ -84,11 +84,11 @@ M: label BC [ 0 BC ] dip rc-relative-ppc-2 label-fixup ;
: CREATE-B ( -- word ) scan "B" prepend create-in ; : CREATE-B ( -- word ) scan "B" prepend create-in ;
: BC: SYNTAX: BC:
CREATE-B scan-word scan-word CREATE-B scan-word scan-word
[ rot BC ] 2curry (( c -- )) define-declared ; parsing [ rot BC ] 2curry (( c -- )) define-declared ;
: B: SYNTAX: B:
CREATE-B scan-word scan-word scan-word scan-word scan-word CREATE-B scan-word scan-word scan-word scan-word scan-word
[ b-insn ] curry curry curry curry curry [ b-insn ] curry curry curry curry curry
(( bo -- )) define-declared ; parsing (( bo -- )) define-declared ;

View File

@ -11,5 +11,4 @@ IN: cpu.x86.assembler.syntax
: define-registers ( names size -- ) : define-registers ( names size -- )
'[ _ define-register ] each-index ; '[ _ define-register ] each-index ;
: REGISTERS: ( -- ) SYNTAX: REGISTERS: scan-word ";" parse-tokens swap define-registers ;
scan-word ";" parse-tokens swap define-registers ; parsing

View File

@ -14,10 +14,10 @@ GENERIC: definition-icon ( definition -- path )
<< <<
: ICON: SYNTAX: ICON:
scan-word \ definition-icon create-method scan-word \ definition-icon create-method
scan '[ drop _ definition-icon-path ] scan '[ drop _ definition-icon-path ]
define ; parsing define ;
>> >>

View File

@ -85,9 +85,9 @@ PRIVATE>
: define-consult ( consultation -- ) : define-consult ( consultation -- )
[ register-consult ] [ consult-methods ] bi ; [ register-consult ] [ consult-methods ] bi ;
: CONSULT: SYNTAX: CONSULT:
scan-word scan-word parse-definition <consultation> scan-word scan-word parse-definition <consultation>
[ save-location ] [ define-consult ] bi ; parsing [ save-location ] [ define-consult ] bi ;
M: consultation where loc>> ; M: consultation where loc>> ;
@ -144,8 +144,8 @@ PRIVATE>
[ initialize-protocol-props ] 2tri [ initialize-protocol-props ] 2tri
] 2bi ; ] 2bi ;
: PROTOCOL: SYNTAX: PROTOCOL:
CREATE-WORD parse-definition define-protocol ; parsing CREATE-WORD parse-definition define-protocol ;
PREDICATE: protocol < word protocol-words ; ! Subclass of symbol? PREDICATE: protocol < word protocol-words ; ! Subclass of symbol?
@ -159,7 +159,7 @@ M: protocol definer drop \ PROTOCOL: \ ; ;
M: protocol group-words protocol-words ; M: protocol group-words protocol-words ;
: SLOT-PROTOCOL: SYNTAX: SLOT-PROTOCOL:
CREATE-WORD ";" parse-tokens CREATE-WORD ";" parse-tokens
[ [ reader-word ] [ writer-word ] bi 2array ] map concat [ [ reader-word ] [ writer-word ] bi 2array ] map concat
define-protocol ; parsing define-protocol ;

View File

@ -53,4 +53,4 @@ M: callable deep-fry
M: object deep-fry , ; M: object deep-fry , ;
: '[ parse-quotation fry over push-all ; parsing SYNTAX: '[ parse-quotation fry over push-all ;

View File

@ -16,6 +16,8 @@ IN: functors
: define* ( word def effect -- ) pick set-word define-declared ; : define* ( word def effect -- ) pick set-word define-declared ;
: define-syntax* ( word def -- ) over set-word define-syntax ;
TUPLE: fake-quotation seq ; TUPLE: fake-quotation seq ;
GENERIC: >fake-quotations ( quot -- fake ) GENERIC: >fake-quotations ( quot -- fake )
@ -41,7 +43,7 @@ M: object fake-quotations> ;
: DEFINE* ( accum -- accum ) effect get parsed \ define* parsed ; : DEFINE* ( accum -- accum ) effect get parsed \ define* parsed ;
: `TUPLE: SYNTAX: `TUPLE:
scan-param parsed scan-param parsed
scan { scan {
{ ";" [ tuple parsed f parsed ] } { ";" [ tuple parsed f parsed ] }
@ -52,40 +54,44 @@ M: object fake-quotations> ;
make parsed make parsed
] ]
} case } case
\ define-tuple-class parsed ; parsing \ define-tuple-class parsed ;
: `M: SYNTAX: `M:
effect off effect off
scan-param parsed scan-param parsed
scan-param parsed scan-param parsed
\ create-method-in parsed \ create-method-in parsed
parse-definition* parse-definition*
DEFINE* ; parsing DEFINE* ;
: `C: SYNTAX: `C:
effect off effect off
scan-param parsed scan-param parsed
scan-param parsed scan-param parsed
[ [ boa ] curry ] over push-all [ [ boa ] curry ] over push-all
DEFINE* ; parsing DEFINE* ;
: `: SYNTAX: `:
effect off effect off
scan-param parsed scan-param parsed
parse-definition* parse-definition*
DEFINE* ; parsing DEFINE* ;
: `INSTANCE: SYNTAX: `SYNTAX:
effect off
scan-param parsed
parse-definition*
\ define-syntax* parsed ;
SYNTAX: `INSTANCE:
scan-param parsed scan-param parsed
scan-param parsed scan-param parsed
\ add-mixin-instance parsed ; parsing \ add-mixin-instance parsed ;
: `inline [ word make-inline ] over push-all ; parsing SYNTAX: `inline [ word make-inline ] over push-all ;
: `parsing [ word make-parsing ] over push-all ; parsing SYNTAX: `(
")" parse-effect effect set ;
: `(
")" parse-effect effect set ; parsing
: (INTERPOLATE) ( accum quot -- accum ) : (INTERPOLATE) ( accum quot -- accum )
[ scan interpolate-locals ] dip [ scan interpolate-locals ] dip
@ -93,11 +99,11 @@ M: object fake-quotations> ;
PRIVATE> PRIVATE>
: IS [ dup search [ ] [ no-word ] ?if ] (INTERPOLATE) ; parsing SYNTAX: IS [ dup search [ ] [ no-word ] ?if ] (INTERPOLATE) ;
: DEFINES [ create-in ] (INTERPOLATE) ; parsing SYNTAX: DEFINES [ create-in ] (INTERPOLATE) ;
: DEFINES-CLASS [ create-class-in ] (INTERPOLATE) ; parsing SYNTAX: DEFINES-CLASS [ create-class-in ] (INTERPOLATE) ;
DEFER: ;FUNCTOR delimiter DEFER: ;FUNCTOR delimiter
@ -110,8 +116,8 @@ DEFER: ;FUNCTOR delimiter
{ "C:" POSTPONE: `C: } { "C:" POSTPONE: `C: }
{ ":" POSTPONE: `: } { ":" POSTPONE: `: }
{ "INSTANCE:" POSTPONE: `INSTANCE: } { "INSTANCE:" POSTPONE: `INSTANCE: }
{ "SYNTAX:" POSTPONE: `SYNTAX: }
{ "inline" POSTPONE: `inline } { "inline" POSTPONE: `inline }
{ "parsing" POSTPONE: `parsing }
{ "(" POSTPONE: `( } { "(" POSTPONE: `( }
} ; } ;
@ -132,4 +138,4 @@ DEFER: ;FUNCTOR delimiter
PRIVATE> PRIVATE>
: FUNCTOR: (FUNCTOR:) define ; parsing SYNTAX: FUNCTOR: (FUNCTOR:) define ;

View File

@ -5,19 +5,19 @@ help.topics namespaces vocabs definitions compiler.units
vocabs.parser ; vocabs.parser ;
IN: help.syntax IN: help.syntax
: HELP: SYNTAX: HELP:
scan-word bootstrap-word scan-word bootstrap-word
dup set-word dup set-word
dup >link save-location dup >link save-location
\ ; parse-until >array swap set-word-help ; parsing \ ; parse-until >array swap set-word-help ;
: ARTICLE: SYNTAX: ARTICLE:
location [ location [
\ ; parse-until >array [ first2 ] keep 2 tail <article> \ ; parse-until >array [ first2 ] keep 2 tail <article>
over add-article >link over add-article >link
] dip remember-definition ; parsing ] dip remember-definition ;
: ABOUT: SYNTAX: ABOUT:
in get vocab in get vocab
dup changed-definition dup changed-definition
scan-object >>help drop ; parsing scan-object >>help drop ;

View File

@ -59,12 +59,11 @@ M: object specializer-declaration class ;
: specialized-length ( specializer -- n ) : specialized-length ( specializer -- n )
dup [ array? ] all? [ first ] when length ; dup [ array? ] all? [ first ] when length ;
: HINTS: SYNTAX: HINTS:
scan-object scan-object
dup method-spec? [ first2 method ] when dup method-spec? [ first2 method ] when
[ redefined ] [ redefined ]
[ parse-definition "specializer" set-word-prop ] bi ; [ parse-definition "specializer" set-word-prop ] bi ;
parsing
! Default specializers ! Default specializers
{ first first2 first3 first4 } { first first2 first3 first4 }

View File

@ -15,8 +15,8 @@ tags [ H{ } clone ] initialize
: define-chloe-tag ( name quot -- ) swap tags get set-at ; : define-chloe-tag ( name quot -- ) swap tags get set-at ;
: CHLOE: SYNTAX: CHLOE:
scan parse-definition define-chloe-tag ; parsing scan parse-definition define-chloe-tag ;
CONSTANT: chloe-ns "http://factorcode.org/chloe/1.0" CONSTANT: chloe-ns "http://factorcode.org/chloe/1.0"

View File

@ -49,7 +49,7 @@ DEFER: <% delimiter
drop drop
] if ; ] if ;
: %> lexer get parse-%> ; parsing SYNTAX: %> lexer get parse-%> ;
: parse-template-lines ( lines -- quot ) : parse-template-lines ( lines -- quot )
<template-lexer> [ <template-lexer> [

View File

@ -38,6 +38,6 @@ MACRO: interpolate ( string -- )
: interpolate-locals ( string -- quot ) : interpolate-locals ( string -- quot )
[ search [ ] ] (interpolate) ; [ search [ ] ] (interpolate) ;
: I[ SYNTAX: I[
"]I" parse-multiline-string "]I" parse-multiline-string
interpolate-locals over push-all ; parsing interpolate-locals over push-all ;

View File

@ -63,6 +63,6 @@ SYMBOL: euc-table
PRIVATE> PRIVATE>
: EUC: SYNTAX: EUC:
! EUC: euc-kr "vocab:io/encodings/korean/cp949.txt" ! EUC: euc-kr "vocab:io/encodings/korean/cp949.txt"
CREATE-CLASS scan-object define-euc ; parsing CREATE-CLASS scan-object define-euc ;

View File

@ -3,7 +3,7 @@ tools.test parser math namespaces continuations vocabs kernel
compiler.units eval vocabs.parser ; compiler.units eval vocabs.parser ;
IN: listener.tests IN: listener.tests
: hello "Hi" print ; parsing SYNTAX: hello "Hi" print ;
: parse-interactive ( string -- quot ) : parse-interactive ( string -- quot )
<string-reader> stream-read-quot ; <string-reader> stream-read-quot ;

View File

@ -5,27 +5,25 @@ vocabs.loader words kernel namespaces locals.parser locals.types
locals.errors ; locals.errors ;
IN: locals IN: locals
: :> SYNTAX: :>
scan locals get [ :>-outside-lambda-error ] unless* scan locals get [ :>-outside-lambda-error ] unless*
[ make-local ] bind <def> parsed ; parsing [ make-local ] bind <def> parsed ;
: [| parse-lambda over push-all ; parsing SYNTAX: [| parse-lambda over push-all ;
: [let parse-let over push-all ; parsing SYNTAX: [let parse-let over push-all ;
: [let* parse-let* over push-all ; parsing SYNTAX: [let* parse-let* over push-all ;
: [wlet parse-wlet over push-all ; parsing SYNTAX: [wlet parse-wlet over push-all ;
: :: (::) define ; parsing SYNTAX: :: (::) define ;
: M:: (M::) define ; parsing SYNTAX: M:: (M::) define ;
: MACRO:: (::) define-macro ; parsing SYNTAX: MACRO:: (::) define-macro ;
: MEMO:: (::) define-memoized ; parsing SYNTAX: MEMO:: (::) define-memoized ;
USE: syntax
{ {
"locals.macros" "locals.macros"

View File

@ -135,11 +135,11 @@ PRIVATE>
[ [ input-logging-quot ] 2keep drop error-logging-quot ] [ [ input-logging-quot ] 2keep drop error-logging-quot ]
(define-logging) ; (define-logging) ;
: LOG: SYNTAX: LOG:
#! Syntax: name level #! Syntax: name level
CREATE-WORD dup scan-word CREATE-WORD dup scan-word
'[ 1array stack>message _ _ log-message ] '[ 1array stack>message _ _ log-message ]
(( message -- )) define-declared ; parsing (( message -- )) define-declared ;
USE: vocabs.loader USE: vocabs.loader

View File

@ -16,7 +16,7 @@ PRIVATE>
[ over real-macro-effect memoize-quot [ call ] append define ] [ over real-macro-effect memoize-quot [ call ] append define ]
2bi ; 2bi ;
: MACRO: (:) define-macro ; parsing SYNTAX: MACRO: (:) define-macro ;
PREDICATE: macro < word "macro" word-prop >boolean ; PREDICATE: macro < word "macro" word-prop >boolean ;

View File

@ -16,8 +16,8 @@ SYMBOL: _
: define-match-vars ( seq -- ) : define-match-vars ( seq -- )
[ define-match-var ] each ; [ define-match-var ] each ;
: MATCH-VARS: ! vars ... SYNTAX: MATCH-VARS: ! vars ...
";" parse-tokens define-match-vars ; parsing ";" parse-tokens define-match-vars ;
: match-var? ( symbol -- bool ) : match-var? ( symbol -- bool )
dup word? [ "match-var" word-prop ] [ drop f ] if ; dup word? [ "match-var" word-prop ] [ drop f ] if ;

View File

@ -289,7 +289,7 @@ M: MATRIX n*V(*)V+M!
M: MATRIX n*V(*)Vconj+M! M: MATRIX n*V(*)Vconj+M!
(prepare-ger) [ XGERC ] dip ; (prepare-ger) [ XGERC ] dip ;
: XMATRIX{ \ } [ >MATRIX ] parse-literal ; parsing SYNTAX: XMATRIX{ \ } [ >MATRIX ] parse-literal ;
M: MATRIX pprint-delims M: MATRIX pprint-delims
drop \ XMATRIX{ \ } ; drop \ XMATRIX{ \ } ;

View File

@ -179,7 +179,7 @@ M: VECTOR n*V+V!
M: VECTOR n*V! M: VECTOR n*V!
(prepare-scal) [ XSCAL ] dip ; (prepare-scal) [ XSCAL ] dip ;
: XVECTOR{ \ } [ >VECTOR ] parse-literal ; parsing SYNTAX: XVECTOR{ \ } [ >VECTOR ] parse-literal ;
M: VECTOR pprint-delims M: VECTOR pprint-delims
drop \ XVECTOR{ \ } ; drop \ XVECTOR{ \ } ;

View File

@ -31,7 +31,7 @@ M: complex sqrt >polar [ fsqrt ] [ 2.0 / ] bi* polar> ;
IN: syntax IN: syntax
: C{ \ } [ first2 rect> ] parse-literal ; parsing SYNTAX: C{ \ } [ first2 rect> ] parse-literal ;
USE: prettyprint.custom USE: prettyprint.custom

View File

@ -41,7 +41,7 @@ PRIVATE>
[ drop "memoize" set-word-prop ] [ drop "memoize" set-word-prop ]
3tri ; 3tri ;
: MEMO: (:) define-memoized ; parsing SYNTAX: MEMO: (:) define-memoized ;
PREDICATE: memoized < word "memoize" word-prop ; PREDICATE: memoized < word "memoize" word-prop ;

View File

@ -20,10 +20,10 @@ PRIVATE>
[ (parse-here) ] "" make but-last [ (parse-here) ] "" make but-last
lexer get next-line ; lexer get next-line ;
: STRING: SYNTAX: STRING:
CREATE-WORD CREATE-WORD
parse-here 1quotation parse-here 1quotation
(( -- string )) define-inline ; parsing (( -- string )) define-inline ;
<PRIVATE <PRIVATE
@ -48,16 +48,16 @@ PRIVATE>
change-column drop change-column drop
] "" make ; ] "" make ;
: <" SYNTAX: <"
"\">" parse-multiline-string parsed ; parsing "\">" parse-multiline-string parsed ;
: <' SYNTAX: <'
"'>" parse-multiline-string parsed ; parsing "'>" parse-multiline-string parsed ;
: {' SYNTAX: {'
"'}" parse-multiline-string parsed ; parsing "'}" parse-multiline-string parsed ;
: {" SYNTAX: {"
"\"}" parse-multiline-string parsed ; parsing "\"}" parse-multiline-string parsed ;
: /* "*/" parse-multiline-string drop ; parsing SYNTAX: /* "*/" parse-multiline-string drop ;

View File

@ -62,7 +62,7 @@ M: nibble-array resize
M: nibble-array byte-length length nibbles>bytes ; M: nibble-array byte-length length nibbles>bytes ;
: N{ \ } [ >nibble-array ] parse-literal ; parsing SYNTAX: N{ \ } [ >nibble-array ] parse-literal ;
INSTANCE: nibble-array sequence INSTANCE: nibble-array sequence

View File

@ -47,7 +47,7 @@ reset-gl-function-number-counter
parameters return parse-arglist [ abi indirect-quot ] dip parameters return parse-arglist [ abi indirect-quot ] dip
define-declared ; define-declared ;
: GL-FUNCTION: SYNTAX: GL-FUNCTION:
gl-function-calling-convention gl-function-calling-convention
scan scan
scan dup scan dup
@ -55,5 +55,4 @@ reset-gl-function-number-counter
gl-function-number gl-function-number
[ gl-function-pointer ] 2curry swap [ gl-function-pointer ] 2curry swap
";" parse-tokens [ "()" subseq? not ] filter ";" parse-tokens [ "()" subseq? not ] filter
define-indirect define-indirect ;
; parsing

View File

@ -279,12 +279,12 @@ H{ } clone verify-messages set-global
: verify-message ( n -- word ) verify-messages get-global at ; : verify-message ( n -- word ) verify-messages get-global at ;
: X509_V_: SYNTAX: X509_V_:
scan "X509_V_" prepend create-in scan "X509_V_" prepend create-in
scan-word scan-word
[ 1quotation (( -- value )) define-inline ] [ 1quotation (( -- value )) define-inline ]
[ verify-messages get set-at ] [ verify-messages get set-at ]
2bi ; parsing 2bi ;
>> >>

View File

@ -34,9 +34,9 @@ TUPLE: tokenizer any one many ;
: reset-tokenizer ( -- ) : reset-tokenizer ( -- )
default-tokenizer \ tokenizer set-global ; default-tokenizer \ tokenizer set-global ;
: TOKENIZER: SYNTAX: TOKENIZER:
scan search [ "Tokenizer not found" throw ] unless* scan search [ "Tokenizer not found" throw ] unless*
execute( -- tokenizer ) \ tokenizer set-global ; parsing execute( -- tokenizer ) \ tokenizer set-global ;
TUPLE: ebnf-non-terminal symbol ; TUPLE: ebnf-non-terminal symbol ;
TUPLE: ebnf-terminal symbol ; TUPLE: ebnf-terminal symbol ;
@ -522,16 +522,14 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
parse-ebnf dup dup parser [ main swap at compile ] with-variable parse-ebnf dup dup parser [ main swap at compile ] with-variable
[ compiled-parse ] curry [ with-scope ast>> ] curry ; [ compiled-parse ] curry [ with-scope ast>> ] curry ;
: <EBNF "EBNF>" reset-tokenizer parse-multiline-string parse-ebnf main swap at SYNTAX: <EBNF "EBNF>" reset-tokenizer parse-multiline-string parse-ebnf main swap at
parsed reset-tokenizer ; parsing parsed reset-tokenizer ;
: [EBNF "EBNF]" reset-tokenizer parse-multiline-string ebnf>quot nip SYNTAX: [EBNF "EBNF]" reset-tokenizer parse-multiline-string ebnf>quot nip
parsed \ call parsed reset-tokenizer ; parsing parsed \ call parsed reset-tokenizer ;
: EBNF: SYNTAX: EBNF:
reset-tokenizer CREATE-WORD dup ";EBNF" parse-multiline-string reset-tokenizer CREATE-WORD dup ";EBNF" parse-multiline-string
ebnf>quot swapd (( input -- ast )) define-declared "ebnf-parser" set-word-prop ebnf>quot swapd (( input -- ast )) define-declared "ebnf-parser" set-word-prop
reset-tokenizer ; parsing reset-tokenizer ;

View File

@ -616,7 +616,7 @@ PRIVATE>
ERROR: parse-failed input word ; ERROR: parse-failed input word ;
: PEG: SYNTAX: PEG:
(:) (:)
[let | def [ ] word [ ] | [let | def [ ] word [ ] |
[ [
@ -630,7 +630,7 @@ ERROR: parse-failed input word ;
] ]
] with-compilation-unit ] with-compilation-unit
] over push-all ] over push-all
] ; parsing ] ;
USING: vocabs vocabs.loader ; USING: vocabs vocabs.loader ;

View File

@ -48,7 +48,7 @@ M: persistent-hash hashcode* nip assoc-size ;
M: persistent-hash clone ; M: persistent-hash clone ;
: PH{ \ } [ >persistent-hash ] parse-literal ; parsing SYNTAX: PH{ \ } [ >persistent-hash ] parse-literal ;
M: persistent-hash pprint-delims drop \ PH{ \ } ; M: persistent-hash pprint-delims drop \ PH{ \ } ;
M: persistent-hash >pprint-sequence >alist ; M: persistent-hash >pprint-sequence >alist ;

View File

@ -179,7 +179,7 @@ M: persistent-vector equal?
: >persistent-vector ( seq -- pvec ) : >persistent-vector ( seq -- pvec )
T{ persistent-vector } like ; T{ persistent-vector } like ;
: PV{ \ } [ >persistent-vector ] parse-literal ; parsing SYNTAX: PV{ \ } [ >persistent-vector ] parse-literal ;
M: persistent-vector pprint-delims drop \ PV{ \ } ; M: persistent-vector pprint-delims drop \ PV{ \ } ;
M: persistent-vector >pprint-sequence ; M: persistent-vector >pprint-sequence ;

View File

@ -96,12 +96,12 @@ ARTICLE: "prettyprint-literal" "Literal prettyprinting protocol"
{ $code { $code
"TUPLE: rect w h ;" "TUPLE: rect w h ;"
"" ""
": RECT[" "SYNTAX: RECT["
" scan-word" " scan-word"
" scan-word \\ * assert=" " scan-word \\ * assert="
" scan-word" " scan-word"
" scan-word \\ ] assert=" " scan-word \\ ] assert="
" <rect> parsed ; parsing" " <rect> parsed ;"
} }
"An example literal might be:" "An example literal might be:"
{ $code "RECT[ 100 * 200 ]" } { $code "RECT[ 100 * 200 ]" }

View File

@ -204,17 +204,17 @@ PRIVATE>
PRIVATE> PRIVATE>
: R! CHAR: ! parsing-regexp ; parsing SYNTAX: R! CHAR: ! parsing-regexp ;
: R" CHAR: " parsing-regexp ; parsing SYNTAX: R" CHAR: " parsing-regexp ;
: R# CHAR: # parsing-regexp ; parsing SYNTAX: R# CHAR: # parsing-regexp ;
: R' CHAR: ' parsing-regexp ; parsing SYNTAX: R' CHAR: ' parsing-regexp ;
: R( CHAR: ) parsing-regexp ; parsing SYNTAX: R( CHAR: ) parsing-regexp ;
: R/ CHAR: / parsing-regexp ; parsing SYNTAX: R/ CHAR: / parsing-regexp ;
: R@ CHAR: @ parsing-regexp ; parsing SYNTAX: R@ CHAR: @ parsing-regexp ;
: R[ CHAR: ] parsing-regexp ; parsing SYNTAX: R[ CHAR: ] parsing-regexp ;
: R` CHAR: ` parsing-regexp ; parsing SYNTAX: R` CHAR: ` parsing-regexp ;
: R{ CHAR: } parsing-regexp ; parsing SYNTAX: R{ CHAR: } parsing-regexp ;
: R| CHAR: | parsing-regexp ; parsing SYNTAX: R| CHAR: | parsing-regexp ;
USING: vocabs vocabs.loader ; USING: vocabs vocabs.loader ;

View File

@ -74,4 +74,4 @@ PRIVATE>
: roman/mod ( str1 str2 -- str3 str4 ) : roman/mod ( str1 str2 -- str3 str4 )
[ /mod ] binary-roman-op [ >roman ] dip ; [ /mod ] binary-roman-op [ >roman ] dip ;
: ROMAN: scan roman> parsed ; parsing SYNTAX: ROMAN: scan roman> parsed ;

View File

@ -93,7 +93,6 @@ M: object declarations. drop ;
M: word declarations. M: word declarations.
{ {
POSTPONE: parsing
POSTPONE: delimiter POSTPONE: delimiter
POSTPONE: inline POSTPONE: inline
POSTPONE: recursive POSTPONE: recursive

View File

@ -19,8 +19,8 @@ MACRO: shuffle-effect ( effect -- )
[ [ at \ swap \ nth [ ] 3sequence ] curry map , \ cleave , ] 2bi [ [ at \ swap \ nth [ ] 3sequence ] curry map , \ cleave , ] 2bi
] [ ] make ; ] [ ] make ;
: shuffle( SYNTAX: shuffle(
")" parse-effect parsed \ shuffle-effect parsed ; parsing ")" parse-effect parsed \ shuffle-effect parsed ;
: 2swap ( x y z t -- z t x y ) 2 2 mnswap ; inline : 2swap ( x y z t -- z t x y ) 2 2 mnswap ; inline

View File

@ -70,7 +70,7 @@ M: A >pprint-sequence ;
M: A pprint* pprint-object ; M: A pprint* pprint-object ;
: A{ \ } [ >A ] parse-literal ; parsing SYNTAX: A{ \ } [ >A ] parse-literal ;
INSTANCE: A sequence INSTANCE: A sequence

View File

@ -39,7 +39,7 @@ M: V >pprint-sequence ;
M: V pprint* pprint-object ; M: V pprint* pprint-object ;
: V{ \ } [ >V ] parse-literal ; parsing SYNTAX: V{ \ } [ >V ] parse-literal ;
INSTANCE: V growable INSTANCE: V growable

View File

@ -32,7 +32,7 @@ PRIVATE>
: >suffix-array ( seq -- array ) : >suffix-array ( seq -- array )
[ suffixes ] map concat natural-sort ; [ suffixes ] map concat natural-sort ;
: SA{ \ } [ >suffix-array ] parse-literal ; parsing SYNTAX: SA{ \ } [ >suffix-array ] parse-literal ;
: query ( begin suffix-array -- matches ) : query ( begin suffix-array -- matches )
2dup find-index dup 2dup find-index dup

View File

@ -40,10 +40,9 @@ M: bad-tr summary
PRIVATE> PRIVATE>
: TR: SYNTAX: TR:
scan parse-definition scan parse-definition
unclip-last [ unclip-last ] dip compute-tr unclip-last [ unclip-last ] dip compute-tr
[ check-tr ] [ check-tr ]
[ [ create-tr ] dip define-tr ] [ [ create-tr ] dip define-tr ]
[ [ "-fast" append create-tr ] dip define-fast-tr ] 2tri ; [ [ "-fast" append create-tr ] dip define-fast-tr ] 2tri ;
parsing

View File

@ -27,12 +27,12 @@ IN: unicode.syntax
PRIVATE> PRIVATE>
: CATEGORY: SYNTAX: CATEGORY:
CREATE ";" parse-tokens define-category ; parsing CREATE ";" parse-tokens define-category ;
: seq-minus ( seq1 seq2 -- diff ) : seq-minus ( seq1 seq2 -- diff )
[ member? not ] curry filter ; [ member? not ] curry filter ;
: CATEGORY-NOT: SYNTAX: CATEGORY-NOT:
CREATE ";" parse-tokens CREATE ";" parse-tokens
categories swap seq-minus define-category ; parsing categories swap seq-minus define-category ;

View File

@ -179,7 +179,7 @@ PRIVATE>
dup protocol>> '[ _ protocol-port or ] change-port ; dup protocol>> '[ _ protocol-port or ] change-port ;
! Literal syntax ! Literal syntax
: URL" lexer get skip-blank parse-string >url parsed ; parsing SYNTAX: URL" lexer get skip-blank parse-string >url parsed ;
USING: vocabs vocabs.loader ; USING: vocabs vocabs.loader ;

View File

@ -30,11 +30,11 @@ PREDICATE: value-word < word
[ second \ obj>> = ] [ second \ obj>> = ]
} 1&& ; } 1&& ;
: VALUE: SYNTAX: VALUE:
CREATE-WORD CREATE-WORD
dup t "no-def-strip" set-word-prop dup t "no-def-strip" set-word-prop
T{ value-holder } clone [ obj>> ] curry T{ value-holder } clone [ obj>> ] curry
(( -- value )) define-declared ; parsing (( -- value )) define-declared ;
M: value-word definer drop \ VALUE: f ; M: value-word definer drop \ VALUE: f ;
@ -43,9 +43,9 @@ M: value-word definition drop f ;
: set-value ( value word -- ) : set-value ( value word -- )
def>> first (>>obj) ; def>> first (>>obj) ;
: to: SYNTAX: to:
scan-word literalize parsed scan-word literalize parsed
\ set-value parsed ; parsing \ set-value parsed ;
: get-value ( word -- value ) : get-value ( word -- value )
def>> first obj>> ; def>> first obj>> ;

View File

@ -50,7 +50,7 @@ M: vlist like
INSTANCE: vlist immutable-sequence INSTANCE: vlist immutable-sequence
: VL{ \ } [ >vlist ] parse-literal ; parsing SYNTAX: VL{ \ } [ >vlist ] parse-literal ;
M: vlist pprint-delims drop \ VL{ \ } ; M: vlist pprint-delims drop \ VL{ \ } ;
M: vlist >pprint-sequence ; M: vlist >pprint-sequence ;
@ -87,7 +87,7 @@ M: valist assoc-like
INSTANCE: valist assoc INSTANCE: valist assoc
: VA{ \ } [ >valist ] parse-literal ; parsing SYNTAX: VA{ \ } [ >valist ] parse-literal ;
M: valist pprint-delims drop \ VA{ \ } ; M: valist pprint-delims drop \ VA{ \ } ;
M: valist >pprint-sequence >alist ; M: valist >pprint-sequence >alist ;

View File

@ -90,14 +90,13 @@ unless
PRIVATE> PRIVATE>
: COM-INTERFACE: SYNTAX: COM-INTERFACE:
scan scan
scan find-com-interface-definition scan find-com-interface-definition
scan string>guid scan string>guid
parse-com-functions parse-com-functions
<com-interface-definition> <com-interface-definition>
dup save-com-interface-definition dup save-com-interface-definition
define-words-for-com-interface define-words-for-com-interface ;
; parsing
: GUID: scan string>guid parsed ; parsing SYNTAX: GUID: scan string>guid parsed ;

View File

@ -26,17 +26,17 @@ M: no-tag summary
PRIVATE> PRIVATE>
: TAGS: SYNTAX: TAGS:
CREATE CREATE
[ H{ } clone "xtable" set-word-prop ] [ H{ } clone "xtable" set-word-prop ]
[ define-tags ] bi ; parsing [ define-tags ] bi ;
: TAG: SYNTAX: TAG:
scan scan-word parse-definition define-tag ; parsing scan scan-word parse-definition define-tag ;
: XML-NS: SYNTAX: XML-NS:
CREATE-WORD (( string -- name )) over set-stack-effect CREATE-WORD (( string -- name )) over set-stack-effect
scan '[ f swap _ <name> ] define-memoized ; parsing scan '[ f swap _ <name> ] define-memoized ;
<PRIVATE <PRIVATE
@ -168,11 +168,11 @@ MACRO: interpolate-xml ( xml -- quot )
PRIVATE> PRIVATE>
: <XML SYNTAX: <XML
"XML>" [ string>doc ] parse-def ; parsing "XML>" [ string>doc ] parse-def ;
: [XML SYNTAX: [XML
"XML]" [ string>chunk ] parse-def ; parsing "XML]" [ string>chunk ] parse-def ;
<PRIVATE <PRIVATE

View File

@ -10,11 +10,11 @@ IN: xmode.loader.syntax
: (parse-rule-tag) ( rule-set tag specs class -- ) : (parse-rule-tag) ( rule-set tag specs class -- )
new swap init-from-tag swap add-rule ; inline new swap init-from-tag swap add-rule ; inline
: RULE: SYNTAX: RULE:
scan scan-word scan-word [ scan scan-word scan-word [
[ parse-definition call( -- ) ] { } make [ parse-definition call( -- ) ] { } make
swap [ (parse-rule-tag) ] 2curry swap [ (parse-rule-tag) ] 2curry
] dip swap define-tag ; parsing ] dip swap define-tag ;
! Attribute utilities ! Attribute utilities
: string>boolean ( string -- ? ) "TRUE" = ; : string>boolean ( string -- ? ) "TRUE" = ;

View File

@ -57,6 +57,7 @@ IN: bootstrap.syntax
"EXCLUDE:" "EXCLUDE:"
"RENAME:" "RENAME:"
"ALIAS:" "ALIAS:"
"SYNTAX:"
"V{" "V{"
"W{" "W{"
"[" "["
@ -68,7 +69,6 @@ IN: bootstrap.syntax
"foldable" "foldable"
"inline" "inline"
"recursive" "recursive"
"parsing"
"t" "t"
"{" "{"
"}" "}"

View File

@ -54,8 +54,10 @@ $nl
ARTICLE: "parsing-words" "Parsing words" ARTICLE: "parsing-words" "Parsing words"
"The Factor parser follows a simple recursive-descent design. The parser reads successive tokens from the input; if the token identifies a number or an ordinary word, it is added to an accumulator vector. Otherwise if the token identifies a parsing word, the parsing word is executed immediately." "The Factor parser follows a simple recursive-descent design. The parser reads successive tokens from the input; if the token identifies a number or an ordinary word, it is added to an accumulator vector. Otherwise if the token identifies a parsing word, the parsing word is executed immediately."
$nl $nl
"Parsing words are marked by suffixing the definition with a " { $link POSTPONE: parsing } " declaration. Here is the simplest possible parsing word; it prints a greeting at parse time:" "Parsing words are defined using the a defining word:"
{ $code ": hello \"Hello world\" print ; parsing" } { $subsection POSTPONE: SYNTAX: }
"Parsing words have uppercase names by convention. Here is the simplest possible parsing word; it prints a greeting at parse time:"
{ $code "SYNTAX: HELLO \"Hello world\" print ;" }
"Parsing words must not pop or push items from the stack; however, they are permitted to access the accumulator vector supplied by the parser at the top of the stack. That is, parsing words must have stack effect " { $snippet "( accum -- accum )" } ", where " { $snippet "accum" } " is the accumulator vector supplied by the parser." "Parsing words must not pop or push items from the stack; however, they are permitted to access the accumulator vector supplied by the parser at the top of the stack. That is, parsing words must have stack effect " { $snippet "( accum -- accum )" } ", where " { $snippet "accum" } " is the accumulator vector supplied by the parser."
$nl $nl
"Parsing words can read input, add word definitions to the dictionary, and do anything an ordinary word can." "Parsing words can read input, add word definitions to the dictionary, and do anything an ordinary word can."

View File

@ -106,7 +106,7 @@ IN: parser.tests
] unit-test ] unit-test
DEFER: foo DEFER: foo
"IN: parser.tests USING: math prettyprint ; : foo 2 2 + . ; parsing" eval "IN: parser.tests USING: math prettyprint ; SYNTAX: foo 2 2 + . ;" eval
[ ] [ "USE: parser.tests foo" eval ] unit-test [ ] [ "USE: parser.tests foo" eval ] unit-test
@ -487,7 +487,7 @@ IN: parser.tests
[ "DEFER: blahy" eval ] [ error>> error>> no-current-vocab? ] must-fail-with [ "DEFER: blahy" eval ] [ error>> error>> no-current-vocab? ] must-fail-with
[ [
"IN: parser.tests : blahy ; parsing FORGET: blahy" eval "IN: parser.tests SYNTAX: blahy ; FORGET: blahy" eval
] [ ] [
error>> staging-violation? error>> staging-violation?
] must-fail-with ] must-fail-with

View File

@ -177,10 +177,10 @@ HELP: delimiter
{ $syntax ": foo ... ; delimiter" } { $syntax ": foo ... ; delimiter" }
{ $description "Declares the most recently defined word as a delimiter. Delimiters are words which are only ever valid as the end of a nested block to be read by " { $link parse-until } ". An unpaired occurrence of a delimiter is a parse error." } ; { $description "Declares the most recently defined word as a delimiter. Delimiters are words which are only ever valid as the end of a nested block to be read by " { $link parse-until } ". An unpaired occurrence of a delimiter is a parse error." } ;
HELP: parsing HELP: SYNTAX:
{ $syntax ": foo ... ; parsing" } { $syntax "SYNTAX: foo ... ;" }
{ $description "Declares the most recently defined word as a parsing word." } { $description "Defines a parsing word." }
{ $examples "In the below example, the " { $snippet "world" } " word is never called, however its body references a parsing word which executes immediately:" { $example "USE: io" "IN: scratchpad" "<< : hello \"Hello parser!\" print ; parsing >>\n: world hello ;" "Hello parser!" } } ; { $examples "In the below example, the " { $snippet "world" } " word is never called, however its body references a parsing word which executes immediately:" { $example "USE: io" "IN: scratchpad" "<< SYNTAX: HELLO \"Hello parser!\" print ; >>\n: world HELLO ;" "Hello parser!" } } ;
HELP: inline HELP: inline
{ $syntax ": foo ... ; inline" } { $syntax ": foo ... ; inline" }

View File

@ -22,58 +22,58 @@ IN: bootstrap.syntax
: define-delimiter ( name -- ) : define-delimiter ( name -- )
"syntax" lookup t "delimiter" set-word-prop ; "syntax" lookup t "delimiter" set-word-prop ;
: define-syntax ( name quot -- ) : define-core-syntax ( name quot -- )
[ dup "syntax" lookup [ dup ] [ no-word-error ] ?if ] dip [ dup "syntax" lookup [ ] [ no-word-error ] ?if ] dip
define make-parsing ; define-syntax ;
[ [
{ "]" "}" ";" ">>" } [ define-delimiter ] each { "]" "}" ";" ">>" } [ define-delimiter ] each
"PRIMITIVE:" [ "PRIMITIVE:" [
"Primitive definition is not supported" throw "Primitive definition is not supported" throw
] define-syntax ] define-core-syntax
"CS{" [ "CS{" [
"Call stack literals are not supported" throw "Call stack literals are not supported" throw
] define-syntax ] define-core-syntax
"!" [ lexer get next-line ] define-syntax "!" [ lexer get next-line ] define-core-syntax
"#!" [ POSTPONE: ! ] define-syntax "#!" [ POSTPONE: ! ] define-core-syntax
"IN:" [ scan set-in ] define-syntax "IN:" [ scan set-in ] define-core-syntax
"PRIVATE>" [ in get ".private" ?tail drop set-in ] define-syntax "PRIVATE>" [ in get ".private" ?tail drop set-in ] define-core-syntax
"<PRIVATE" [ "<PRIVATE" [
POSTPONE: PRIVATE> in get ".private" append set-in POSTPONE: PRIVATE> in get ".private" append set-in
] define-syntax ] define-core-syntax
"USE:" [ scan use+ ] define-syntax "USE:" [ scan use+ ] define-core-syntax
"USING:" [ ";" parse-tokens add-use ] define-syntax "USING:" [ ";" parse-tokens add-use ] define-core-syntax
"QUALIFIED:" [ scan dup add-qualified ] define-syntax "QUALIFIED:" [ scan dup add-qualified ] define-core-syntax
"QUALIFIED-WITH:" [ scan scan add-qualified ] define-syntax "QUALIFIED-WITH:" [ scan scan add-qualified ] define-core-syntax
"FROM:" [ "FROM:" [
scan "=>" expect ";" parse-tokens swap add-words-from scan "=>" expect ";" parse-tokens swap add-words-from
] define-syntax ] define-core-syntax
"EXCLUDE:" [ "EXCLUDE:" [
scan "=>" expect ";" parse-tokens swap add-words-excluding scan "=>" expect ";" parse-tokens swap add-words-excluding
] define-syntax ] define-core-syntax
"RENAME:" [ "RENAME:" [
scan scan "=>" expect scan add-renamed-word scan scan "=>" expect scan add-renamed-word
] define-syntax ] define-core-syntax
"HEX:" [ 16 parse-base ] define-syntax "HEX:" [ 16 parse-base ] define-core-syntax
"OCT:" [ 8 parse-base ] define-syntax "OCT:" [ 8 parse-base ] define-core-syntax
"BIN:" [ 2 parse-base ] define-syntax "BIN:" [ 2 parse-base ] define-core-syntax
"f" [ f parsed ] define-syntax "f" [ f parsed ] define-core-syntax
"t" "syntax" lookup define-singleton-class "t" "syntax" lookup define-singleton-class
"CHAR:" [ "CHAR:" [
@ -82,157 +82,160 @@ IN: bootstrap.syntax
{ [ "\\" ?head ] [ next-escape >string "" assert= ] } { [ "\\" ?head ] [ next-escape >string "" assert= ] }
[ name>char-hook get call( name -- char ) ] [ name>char-hook get call( name -- char ) ]
} cond parsed } cond parsed
] define-syntax ] define-core-syntax
"\"" [ parse-string parsed ] define-syntax "\"" [ parse-string parsed ] define-core-syntax
"SBUF\"" [ "SBUF\"" [
lexer get skip-blank parse-string >sbuf parsed lexer get skip-blank parse-string >sbuf parsed
] define-syntax ] define-core-syntax
"P\"" [ "P\"" [
lexer get skip-blank parse-string <pathname> parsed lexer get skip-blank parse-string <pathname> parsed
] define-syntax ] define-core-syntax
"[" [ parse-quotation parsed ] define-syntax "[" [ parse-quotation parsed ] define-core-syntax
"{" [ \ } [ >array ] parse-literal ] define-syntax "{" [ \ } [ >array ] parse-literal ] define-core-syntax
"V{" [ \ } [ >vector ] parse-literal ] define-syntax "V{" [ \ } [ >vector ] parse-literal ] define-core-syntax
"B{" [ \ } [ >byte-array ] parse-literal ] define-syntax "B{" [ \ } [ >byte-array ] parse-literal ] define-core-syntax
"H{" [ \ } [ >hashtable ] parse-literal ] define-syntax "H{" [ \ } [ >hashtable ] parse-literal ] define-core-syntax
"T{" [ parse-tuple-literal parsed ] define-syntax "T{" [ parse-tuple-literal parsed ] define-core-syntax
"W{" [ \ } [ first <wrapper> ] parse-literal ] define-syntax "W{" [ \ } [ first <wrapper> ] parse-literal ] define-core-syntax
"POSTPONE:" [ scan-word parsed ] define-syntax "POSTPONE:" [ scan-word parsed ] define-core-syntax
"\\" [ scan-word <wrapper> parsed ] define-syntax "\\" [ scan-word <wrapper> parsed ] define-core-syntax
"inline" [ word make-inline ] define-syntax "inline" [ word make-inline ] define-core-syntax
"recursive" [ word make-recursive ] define-syntax "recursive" [ word make-recursive ] define-core-syntax
"foldable" [ word make-foldable ] define-syntax "foldable" [ word make-foldable ] define-core-syntax
"flushable" [ word make-flushable ] define-syntax "flushable" [ word make-flushable ] define-core-syntax
"delimiter" [ word t "delimiter" set-word-prop ] define-syntax "delimiter" [ word t "delimiter" set-word-prop ] define-core-syntax
"parsing" [ word make-parsing ] define-syntax
"SYNTAX:" [
(:) define-syntax
] define-core-syntax
"SYMBOL:" [ "SYMBOL:" [
CREATE-WORD define-symbol CREATE-WORD define-symbol
] define-syntax ] define-core-syntax
"SYMBOLS:" [ "SYMBOLS:" [
";" parse-tokens ";" parse-tokens
[ create-in dup reset-generic define-symbol ] each [ create-in dup reset-generic define-symbol ] each
] define-syntax ] define-core-syntax
"SINGLETONS:" [ "SINGLETONS:" [
";" parse-tokens ";" parse-tokens
[ create-class-in define-singleton-class ] each [ create-class-in define-singleton-class ] each
] define-syntax ] define-core-syntax
"ALIAS:" [ "ALIAS:" [
CREATE-WORD scan-word define-alias CREATE-WORD scan-word define-alias
] define-syntax ] define-core-syntax
"CONSTANT:" [ "CONSTANT:" [
CREATE scan-object define-constant CREATE scan-object define-constant
] define-syntax ] define-core-syntax
"DEFER:" [ "DEFER:" [
scan current-vocab create scan current-vocab create
[ fake-definition ] [ set-word ] [ [ undefined ] define ] tri [ fake-definition ] [ set-word ] [ [ undefined ] define ] tri
] define-syntax ] define-core-syntax
":" [ ":" [
(:) define (:) define
] define-syntax ] define-core-syntax
"GENERIC:" [ "GENERIC:" [
CREATE-GENERIC define-simple-generic CREATE-GENERIC define-simple-generic
] define-syntax ] define-core-syntax
"GENERIC#" [ "GENERIC#" [
CREATE-GENERIC CREATE-GENERIC
scan-word <standard-combination> define-generic scan-word <standard-combination> define-generic
] define-syntax ] define-core-syntax
"MATH:" [ "MATH:" [
CREATE-GENERIC CREATE-GENERIC
T{ math-combination } define-generic T{ math-combination } define-generic
] define-syntax ] define-core-syntax
"HOOK:" [ "HOOK:" [
CREATE-GENERIC scan-word CREATE-GENERIC scan-word
<hook-combination> define-generic <hook-combination> define-generic
] define-syntax ] define-core-syntax
"M:" [ "M:" [
(M:) define (M:) define
] define-syntax ] define-core-syntax
"UNION:" [ "UNION:" [
CREATE-CLASS parse-definition define-union-class CREATE-CLASS parse-definition define-union-class
] define-syntax ] define-core-syntax
"INTERSECTION:" [ "INTERSECTION:" [
CREATE-CLASS parse-definition define-intersection-class CREATE-CLASS parse-definition define-intersection-class
] define-syntax ] define-core-syntax
"MIXIN:" [ "MIXIN:" [
CREATE-CLASS define-mixin-class CREATE-CLASS define-mixin-class
] define-syntax ] define-core-syntax
"INSTANCE:" [ "INSTANCE:" [
location [ location [
scan-word scan-word 2dup add-mixin-instance scan-word scan-word 2dup add-mixin-instance
<mixin-instance> <mixin-instance>
] dip remember-definition ] dip remember-definition
] define-syntax ] define-core-syntax
"PREDICATE:" [ "PREDICATE:" [
CREATE-CLASS CREATE-CLASS
scan "<" assert= scan "<" assert=
scan-word scan-word
parse-definition define-predicate-class parse-definition define-predicate-class
] define-syntax ] define-core-syntax
"SINGLETON:" [ "SINGLETON:" [
CREATE-CLASS define-singleton-class CREATE-CLASS define-singleton-class
] define-syntax ] define-core-syntax
"TUPLE:" [ "TUPLE:" [
parse-tuple-definition define-tuple-class parse-tuple-definition define-tuple-class
] define-syntax ] define-core-syntax
"SLOT:" [ "SLOT:" [
scan define-protocol-slot scan define-protocol-slot
] define-syntax ] define-core-syntax
"C:" [ "C:" [
CREATE-WORD scan-word define-boa-word CREATE-WORD scan-word define-boa-word
] define-syntax ] define-core-syntax
"ERROR:" [ "ERROR:" [
parse-tuple-definition parse-tuple-definition
pick save-location pick save-location
define-error-class define-error-class
] define-syntax ] define-core-syntax
"FORGET:" [ "FORGET:" [
scan-object forget scan-object forget
] define-syntax ] define-core-syntax
"(" [ "(" [
")" parse-effect ")" parse-effect
word dup [ set-stack-effect ] [ 2drop ] if word dup [ set-stack-effect ] [ 2drop ] if
] define-syntax ] define-core-syntax
"((" [ "((" [
"))" parse-effect parsed "))" parse-effect parsed
] define-syntax ] define-core-syntax
"MAIN:" [ scan-word in get vocab (>>main) ] define-syntax "MAIN:" [ scan-word in get vocab (>>main) ] define-core-syntax
"<<" [ "<<" [
[ [
\ >> parse-until >quotation \ >> parse-until >quotation
] with-nested-compilation-unit call( -- ) ] with-nested-compilation-unit call( -- )
] define-syntax ] define-core-syntax
"call-next-method" [ "call-next-method" [
current-method get [ current-method get [
@ -241,13 +244,13 @@ IN: bootstrap.syntax
] [ ] [
not-in-a-method-error not-in-a-method-error
] if* ] if*
] define-syntax ] define-core-syntax
"initial:" "syntax" lookup define-symbol "initial:" "syntax" lookup define-symbol
"read-only" "syntax" lookup define-symbol "read-only" "syntax" lookup define-symbol
"call(" [ \ call-effect parse-call( ] define-syntax "call(" [ \ call-effect parse-call( ] define-core-syntax
"execute(" [ \ execute-effect parse-call( ] define-syntax "execute(" [ \ execute-effect parse-call( ] define-core-syntax
] with-compilation-unit ] with-compilation-unit

View File

@ -57,16 +57,12 @@ $nl
} ; } ;
ARTICLE: "declarations" "Declarations" ARTICLE: "declarations" "Declarations"
"Declarations give special behavior to a word. Declarations are parsing words that set a word property in the most recently defined word." "Declarations are parsing words that set a word property in the most recently defined word. Declarations only affect definitions compiled with the optimizing compiler. They do not change evaluation semantics of a word, but instead declare that the word follows a certain contract, and thus may be compiled differently."
$nl
"The first declaration specifies the time when a word runs. It affects both the non-optimizing and optimizing compilers:"
{ $subsection POSTPONE: parsing }
"The remaining declarations only affect definitions compiled with the optimizing compiler. They do not change evaluation semantics of a word, but instead declare that the word follows a certain contract, and thus may be compiled differently."
{ $warning "If a generic word is declared " { $link POSTPONE: foldable } " or " { $link POSTPONE: flushable } ", all methods must satisfy the contract, otherwise unpredicable behavior will occur." }
{ $subsection POSTPONE: inline } { $subsection POSTPONE: inline }
{ $subsection POSTPONE: foldable } { $subsection POSTPONE: foldable }
{ $subsection POSTPONE: flushable } { $subsection POSTPONE: flushable }
{ $subsection POSTPONE: recursive } { $subsection POSTPONE: recursive }
{ $warning "If a generic word is declared " { $link POSTPONE: foldable } " or " { $link POSTPONE: flushable } ", all methods must satisfy the contract, otherwise unpredicable behavior will occur." }
"Stack effect declarations are documented in " { $link "effect-declaration" } "." ; "Stack effect declarations are documented in " { $link "effect-declaration" } "." ;
ARTICLE: "word-definition" "Defining words" ARTICLE: "word-definition" "Defining words"
@ -279,7 +275,7 @@ HELP: bootstrap-word
HELP: parsing-word? ( obj -- ? ) HELP: parsing-word? ( obj -- ? )
{ $values { "obj" object } { "?" "a boolean" } } { $values { "obj" object } { "?" "a boolean" } }
{ $description "Tests if an object is a parsing word declared by " { $link POSTPONE: parsing } "." } { $description "Tests if an object is a parsing word declared by " { $link POSTPONE: SYNTAX: } "." }
{ $notes "Outputs " { $link f } " if the object is not a word." } ; { $notes "Outputs " { $link f } " if the object is not a word." } ;
HELP: define-declared HELP: define-declared

View File

@ -232,7 +232,10 @@ ERROR: bad-create name vocab ;
PREDICATE: parsing-word < word "parsing" word-prop ; PREDICATE: parsing-word < word "parsing" word-prop ;
: make-parsing ( word -- ) t "parsing" set-word-prop ; M: parsing-word definer drop \ SYNTAX: \ ; ;
: define-syntax ( word quot -- )
[ drop ] [ define ] 2bi t "parsing" set-word-prop ;
: delimiter? ( obj -- ? ) : delimiter? ( obj -- ? )
dup word? [ "delimiter" word-prop ] [ drop f ] if ; dup word? [ "delimiter" word-prop ] [ drop f ] if ;

View File

@ -56,8 +56,8 @@ PRIVATE>
: unadvise ( word -- ) : unadvise ( word -- )
[ reset ] [ { before after around advised } [ f swap set-word-prop ] with each ] bi ; [ reset ] [ { before after around advised } [ f swap set-word-prop ] with each ] bi ;
: ADVISE: ! word adname location => word adname quot loc SYNTAX: ADVISE: ! word adname location => word adname quot loc
scan-word scan scan-word parse-definition swap [ spin ] dip advise ; parsing scan-word scan scan-word parse-definition swap [ spin ] dip advise ;
: UNADVISE: SYNTAX: UNADVISE:
scan-word parsed \ unadvise parsed ; parsing scan-word parsed \ unadvise parsed ;

View File

@ -24,7 +24,7 @@ NAMEs. DEFINES ${NAME}s.
WHERE WHERE
: (NAME) ( str -- ) drop ; inline : (NAME) ( str -- ) drop ; inline
: !NAME (parse-annotation) \ (NAME) parsed ; parsing SYNTAX: !NAME (parse-annotation) \ (NAME) parsed ;
: NAMEs ( -- usages ) : NAMEs ( -- usages )
\ (NAME) (non-annotation-usage) ; \ (NAME) (non-annotation-usage) ;

View File

@ -23,8 +23,7 @@ PRIVATE>
[ "descriptive-definition" set-word-prop ] [ "descriptive-definition" set-word-prop ]
[ dupd [descriptive] define ] 2bi ; [ dupd [descriptive] define ] 2bi ;
: DESCRIPTIVE: SYNTAX: DESCRIPTIVE: (:) define-descriptive ;
(:) define-descriptive ; parsing
PREDICATE: descriptive < word PREDICATE: descriptive < word
"descriptive-definition" word-prop ; "descriptive-definition" word-prop ;
@ -34,8 +33,7 @@ M: descriptive definer drop \ DESCRIPTIVE: \ ; ;
M: descriptive definition M: descriptive definition
"descriptive-definition" word-prop ; "descriptive-definition" word-prop ;
: DESCRIPTIVE:: SYNTAX: DESCRIPTIVE:: (::) define-descriptive ;
(::) define-descriptive ; parsing
INTERSECTION: descriptive-lambda descriptive lambda-word ; INTERSECTION: descriptive-lambda descriptive lambda-word ;

View File

@ -81,8 +81,8 @@ M: ast-function infix-codegen
infix-codegen prepare-operand ; infix-codegen prepare-operand ;
PRIVATE> PRIVATE>
: [infix SYNTAX: [infix
"infix]" [infix-parse parsed \ call parsed ; parsing "infix]" [infix-parse parsed \ call parsed ;
<PRIVATE <PRIVATE
: parse-infix-locals ( assoc end -- quot ) : parse-infix-locals ( assoc end -- quot )
@ -93,6 +93,6 @@ PRIVATE>
] with-scope ; ] with-scope ;
PRIVATE> PRIVATE>
: [infix| SYNTAX: [infix|
"|" parse-bindings "infix]" parse-infix-locals <let> "|" parse-bindings "infix]" parse-infix-locals <let>
?rewrite-closures over push-all ; parsing ?rewrite-closures over push-all ;

View File

@ -2,5 +2,5 @@
USING: accessors continuations kernel parser words quotations vectors ; USING: accessors continuations kernel parser words quotations vectors ;
IN: literals IN: literals
: $ scan-word [ def>> call ] curry with-datastack >vector ; parsing SYNTAX: $ scan-word [ def>> call ] curry with-datastack >vector ;
: $[ parse-quotation with-datastack >vector ; parsing SYNTAX: $[ parse-quotation with-datastack >vector ;

View File

@ -5,6 +5,6 @@ USING: kernel parser words effects accessors sequences
IN: math.derivatives.syntax IN: math.derivatives.syntax
: DERIVATIVE: scan-object dup stack-effect in>> length [1,b] SYNTAX: DERIVATIVE: scan-object dup stack-effect in>> length [1,b]
[ drop scan-object ] map [ drop scan-object ] map
"derivative" set-word-prop ; parsing "derivative" set-word-prop ;

View File

@ -3,5 +3,5 @@
USING: kernel generic generic.parser words fry ; USING: kernel generic generic.parser words fry ;
IN: method-chains IN: method-chains
: AFTER: (M:) dupd '[ [ _ (call-next-method) ] _ bi ] define ; parsing SYNTAX: AFTER: (M:) dupd '[ [ _ (call-next-method) ] _ bi ] define ;
: BEFORE: (M:) over '[ _ [ _ (call-next-method) ] bi ] define ; parsing SYNTAX: BEFORE: (M:) over '[ _ [ _ (call-next-method) ] bi ] define ;

View File

@ -30,5 +30,4 @@ ERROR: not-an-integer x ;
] keep length ] keep length
10 swap ^ / + swap [ neg ] when ; 10 swap ^ / + swap [ neg ] when ;
: DECIMAL: SYNTAX: DECIMAL: scan parse-decimal parsed ;
scan parse-decimal parsed ; parsing

View File

@ -40,8 +40,9 @@ M: lex-hash at* swap {
: create-bnf ( name parser -- ) reset-tokenizer [ lexer get skip-blank parse* parsed ] curry : create-bnf ( name parser -- ) reset-tokenizer [ lexer get skip-blank parse* parsed ] curry
define word make-parsing ; define word make-parsing ;
: ON-BNF: CREATE-WORD reset-tokenizer ";ON-BNF" parse-multiline-string parse-ebnf SYNTAX: ON-BNF:
main swap at create-bnf ; parsing CREATE-WORD reset-tokenizer ";ON-BNF" parse-multiline-string parse-ebnf
main swap at create-bnf ;
! Tokenizer like standard factor lexer ! Tokenizer like standard factor lexer
EBNF: factor EBNF: factor

View File

@ -128,10 +128,10 @@ PRIVATE>
: d-transform ( triple -- new-triple ) : d-transform ( triple -- new-triple )
{ { -1 -2 -2 } { 2 1 2 } { 2 2 3 } } transform ; { { -1 -2 -2 } { 2 1 2 } { 2 2 3 } } transform ;
: SOLUTION: SYNTAX: SOLUTION:
scan-word scan-word
[ name>> "-main" append create-in ] keep [ name>> "-main" append create-in ] keep
[ drop in get vocab (>>main) ] [ drop in get vocab (>>main) ]
[ [ . ] swap prefix (( -- )) define-declared ] [ [ . ] swap prefix (( -- )) define-declared ]
2bi ; parsing 2bi ;

View File

@ -35,7 +35,7 @@ TUPLE: promise quot forced? value ;
\ promise , \ promise ,
] [ ] make ; ] [ ] make ;
: LAZY: SYNTAX: LAZY:
CREATE-WORD CREATE-WORD
dup parse-definition dup parse-definition
make-lazy-quot define ; parsing make-lazy-quot define ;

View File

@ -94,8 +94,8 @@ TUPLE: slides < book ;
2 + (strip-tease) 2 + (strip-tease)
] with map ; ] with map ;
: STRIP-TEASE: SYNTAX: STRIP-TEASE:
parse-definition strip-tease [ parsed ] each ; parsing parse-definition strip-tease [ parsed ] each ;
\ slides H{ \ slides H{
{ T{ button-down } [ request-focus ] } { T{ button-down } [ request-focus ] }

View File

@ -152,7 +152,7 @@ M: avl new-assoc 2drop <avl> ;
M: avl assoc-like M: avl assoc-like
drop dup avl? [ >avl ] unless ; drop dup avl? [ >avl ] unless ;
: AVL{ SYNTAX: AVL{
\ } [ >avl ] parse-literal ; parsing \ } [ >avl ] parse-literal ;
M: avl pprint-delims drop \ AVL{ \ } ; M: avl pprint-delims drop \ AVL{ \ } ;

View File

@ -131,8 +131,8 @@ M: splay new-assoc
: >splay ( assoc -- tree ) : >splay ( assoc -- tree )
T{ splay f f 0 } assoc-clone-like ; T{ splay f f 0 } assoc-clone-like ;
: SPLAY{ SYNTAX: SPLAY{
\ } [ >splay ] parse-literal ; parsing \ } [ >splay ] parse-literal ;
M: splay assoc-like M: splay assoc-like
drop dup splay? [ >splay ] unless ; drop dup splay? [ >splay ] unless ;

View File

@ -198,8 +198,8 @@ M: tree clone dup assoc-clone-like ;
M: tree assoc-like drop dup tree? [ >tree ] unless ; M: tree assoc-like drop dup tree? [ >tree ] unless ;
: TREE{ SYNTAX: TREE{
\ } [ >tree ] parse-literal ; parsing \ } [ >tree ] parse-literal ;
M: tree assoc-size count>> ; M: tree assoc-size count>> ;
M: tree pprint-delims drop \ TREE{ \ } ; M: tree pprint-delims drop \ TREE{ \ } ;

View File

@ -21,11 +21,11 @@ IN: vars
[ define-var-getter ] [ define-var-getter ]
[ define-var-setter ] tri ; [ define-var-setter ] tri ;
: VAR: ! var SYNTAX: VAR: ! var
scan define-var ; parsing scan define-var ;
: define-vars ( seq -- ) : define-vars ( seq -- )
[ define-var ] each ; [ define-var ] each ;
: VARS: ! vars ... SYNTAX: VARS: ! vars ...
";" parse-tokens define-vars ; parsing ";" parse-tokens define-vars ;