factor/library/syntax/parse-syntax.factor

79 lines
2.5 KiB
Factor
Raw Normal View History

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.
! 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 ;
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
: [ 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
: { [ >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-01-03 17:43:29 -05:00
DEFER: PRIMITIVE: parsing
: DEFER: CREATE dup reset-generic drop ; parsing
: : CREATE dup reset-generic [ define-compound ] f ; parsing
2006-01-03 17:43:29 -05:00
: GENERIC: CREATE dup reset-word define-generic ; parsing
: 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
[ 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
[ 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:
scan-word [ create-constructor ] keep
[ 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