2006-01-03 17:43:29 -05:00
|
|
|
! Copyright (C) 2004, 2006 Slava Pestov.
|
2006-05-15 01:01:47 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2004-07-22 19:48:50 -04:00
|
|
|
|
2004-12-15 16:57:29 -05:00
|
|
|
! Bootstrapping trick; see doc/bootstrap.txt.
|
|
|
|
IN: !syntax
|
2006-05-15 01:01:47 -04:00
|
|
|
USING: alien arrays errors generic hashtables kernel math
|
2006-06-18 20:58:11 -04:00
|
|
|
modules namespaces parser sequences strings syntax vectors words ;
|
2004-07-22 19:48:50 -04:00
|
|
|
|
2006-02-21 18:33:16 -05:00
|
|
|
: (
|
|
|
|
CHAR: ) column [
|
|
|
|
line-text get index* dup -1 =
|
|
|
|
[ "Unterminated (" throw ] when 1+
|
|
|
|
] change ; parsing
|
|
|
|
|
|
|
|
: ! line-text get length column set ; parsing
|
|
|
|
: #! POSTPONE: ! ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
: IN: scan set-in ; parsing
|
|
|
|
: USE: scan use+ ; parsing
|
|
|
|
: USING: string-mode on [ string-mode off add-use ] f ; parsing
|
2006-05-14 23:10:54 -04:00
|
|
|
: (BASE) scan swap base> parsed ;
|
2006-01-03 17:43:29 -05:00
|
|
|
: HEX: 16 (BASE) ; parsing
|
|
|
|
: OCT: 8 (BASE) ; parsing
|
|
|
|
: BIN: 2 (BASE) ; parsing
|
2005-09-09 17:32:38 -04:00
|
|
|
SYMBOL: t
|
2006-05-14 23:10:54 -04:00
|
|
|
: f f parsed ; parsing
|
|
|
|
: CHAR: 0 scan next-char nip parsed ; parsing
|
|
|
|
: " parse-string parsed ; parsing
|
|
|
|
: SBUF" skip-blank parse-string >sbuf parsed ; parsing
|
2004-10-23 01:15:06 -04:00
|
|
|
: [ f ; parsing
|
2006-05-15 01:01:47 -04:00
|
|
|
: ] >quotation parsed ; parsing
|
|
|
|
: ; >quotation swap call ; parsing
|
2006-05-14 23:10:54 -04:00
|
|
|
: } swap call parsed ; parsing
|
2006-05-17 19:05:44 -04:00
|
|
|
: { [ >array ] f ; parsing
|
|
|
|
: V{ [ >vector ] f ; parsing
|
|
|
|
: H{ [ alist>hash ] f ; parsing
|
|
|
|
: C{ [ first2 rect> ] f ; parsing
|
|
|
|
: T{ [ >tuple ] f ; parsing
|
|
|
|
: W{ [ first <wrapper> ] f ; parsing
|
2006-05-14 23:10:54 -04:00
|
|
|
: POSTPONE: scan-word parsed ; parsing
|
|
|
|
: \ scan-word literalize parsed ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
: parsing word t "parsing" set-word-prop ; parsing
|
|
|
|
: inline word t "inline" set-word-prop ; parsing
|
|
|
|
: foldable word t "foldable" set-word-prop ; parsing
|
|
|
|
: SYMBOL: CREATE dup reset-generic define-symbol ; parsing
|
2006-03-26 19:47:51 -05:00
|
|
|
|
2006-01-03 17:43:29 -05:00
|
|
|
DEFER: PRIMITIVE: parsing
|
|
|
|
: DEFER: CREATE dup reset-generic drop ; parsing
|
2006-05-17 19:05:44 -04:00
|
|
|
: : CREATE dup reset-generic [ define-compound ] f ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
: GENERIC: CREATE dup reset-word define-generic ; parsing
|
2006-05-17 19:05:44 -04:00
|
|
|
: G: CREATE dup reset-word [ define-generic* ] f ; parsing
|
|
|
|
: M: scan-word scan-word [ -rot define-method ] f ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
|
|
|
|
: UNION: ( -- class predicate definition )
|
|
|
|
CREATE dup intern-symbol dup predicate-word
|
|
|
|
[ dupd unit "predicate" set-word-prop ] keep
|
2006-05-17 19:05:44 -04:00
|
|
|
[ define-union ] f ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
|
|
|
|
: PREDICATE: ( -- class predicate definition )
|
|
|
|
scan-word CREATE dup intern-symbol
|
|
|
|
dup rot "superclass" set-word-prop dup predicate-word
|
2006-05-17 19:05:44 -04:00
|
|
|
[ define-predicate-class ] f ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
|
|
|
|
: TUPLE:
|
|
|
|
scan string-mode on [ string-mode off define-tuple ] f ;
|
|
|
|
parsing
|
|
|
|
|
|
|
|
: C:
|
2006-01-10 23:44:17 -05:00
|
|
|
scan-word [ create-constructor ] keep
|
2006-05-17 19:05:44 -04:00
|
|
|
[ define-constructor ] f ; parsing
|
2006-01-03 17:43:29 -05:00
|
|
|
|
2006-01-24 19:49:31 -05:00
|
|
|
: FORGET: scan use get hash-stack [ forget ] when* ; parsing
|
2006-06-18 20:58:11 -04:00
|
|
|
|
|
|
|
: PROVIDE:
|
|
|
|
scan [ { { } { } } append first2 provide ] f ; parsing
|
|
|
|
|
|
|
|
: REQUIRE:
|
|
|
|
string-mode on
|
|
|
|
[ string-mode off [ require ] each ] f ; parsing
|