Get more code to load after SYNTAX: change
parent
385892be64
commit
30816ba5d0
|
@ -25,8 +25,7 @@ M: tuple-class component-tag ( tag class -- )
|
||||||
[ compile-component-attrs ] 2bi
|
[ compile-component-attrs ] 2bi
|
||||||
[ render ] [code] ;
|
[ render ] [code] ;
|
||||||
|
|
||||||
: COMPONENT:
|
SYNTAX: COMPONENT:
|
||||||
scan-word
|
scan-word
|
||||||
[ name>> ] [ '[ _ component-tag ] ] bi
|
[ name>> ] [ '[ _ component-tag ] ] bi
|
||||||
define-chloe-tag ;
|
define-chloe-tag ;
|
||||||
parsing
|
|
||||||
|
|
|
@ -224,8 +224,7 @@ M: no-method error.
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
! Syntax
|
! Syntax
|
||||||
: GENERIC:
|
SYNTAX: GENERIC: CREATE define-generic ;
|
||||||
CREATE define-generic ; parsing
|
|
||||||
|
|
||||||
: parse-method ( -- quot classes generic )
|
: parse-method ( -- quot classes generic )
|
||||||
parse-definition [ 2 tail ] [ second ] [ first ] tri ;
|
parse-definition [ 2 tail ] [ second ] [ first ] tri ;
|
||||||
|
@ -238,13 +237,13 @@ M: no-method error.
|
||||||
|
|
||||||
: (METHOD:) ( -- method def ) CREATE-METHOD parse-definition ;
|
: (METHOD:) ( -- method def ) CREATE-METHOD parse-definition ;
|
||||||
|
|
||||||
: METHOD: (METHOD:) define ; parsing
|
SYNTAX: METHOD: (METHOD:) define ;
|
||||||
|
|
||||||
! For compatibility
|
! For compatibility
|
||||||
: M:
|
SYNTAX: M:
|
||||||
scan-word 1array scan-word create-method-in
|
scan-word 1array scan-word create-method-in
|
||||||
parse-definition
|
parse-definition
|
||||||
define ; parsing
|
define ;
|
||||||
|
|
||||||
! Definition protocol. We qualify core generics here
|
! Definition protocol. We qualify core generics here
|
||||||
QUALIFIED: syntax
|
QUALIFIED: syntax
|
||||||
|
|
|
@ -9,36 +9,46 @@ CONSULT: assoc-protocol lex-hash hash>> ;
|
||||||
: pos-or-0 ( neg? -- pos/0 ) dup 0 < [ drop 0 ] when ;
|
: pos-or-0 ( neg? -- pos/0 ) dup 0 < [ drop 0 ] when ;
|
||||||
|
|
||||||
:: prepare-pos ( v i -- c l )
|
:: prepare-pos ( v i -- c l )
|
||||||
[let | n [ i v head-slice ] |
|
[let | n [ i v head-slice ] |
|
||||||
v CHAR: \n n last-index -1 or 1+ -
|
v CHAR: \n n last-index -1 or 1+ -
|
||||||
n [ CHAR: \n = ] count 1+ ] ;
|
n [ CHAR: \n = ] count 1+
|
||||||
|
] ;
|
||||||
|
|
||||||
: store-pos ( v a -- ) input swap at prepare-pos
|
: store-pos ( v a -- )
|
||||||
lexer get [ (>>line) ] keep (>>column) ;
|
input swap at prepare-pos
|
||||||
|
lexer get [ (>>line) ] keep (>>column) ;
|
||||||
|
|
||||||
M: lex-hash set-at swap {
|
M: lex-hash set-at
|
||||||
{ pos [ store-pos ] }
|
swap {
|
||||||
[ swap hash>> set-at ] } case ;
|
{ pos [ store-pos ] }
|
||||||
|
[ swap hash>> set-at ]
|
||||||
|
} case ;
|
||||||
|
|
||||||
:: at-pos ( t l c -- p ) t l head-slice [ length ] map sum l 1- + c + ;
|
:: at-pos ( t l c -- p ) t l head-slice [ length ] map sum l 1- + c + ;
|
||||||
|
|
||||||
M: lex-hash at* swap {
|
M: lex-hash at*
|
||||||
|
swap {
|
||||||
{ input [ drop lexer get text>> "\n" join t ] }
|
{ input [ drop lexer get text>> "\n" join t ] }
|
||||||
{ pos [ drop lexer get [ text>> ] [ line>> 1- ] [ column>> 1+ ] tri at-pos t ] }
|
{ pos [ drop lexer get [ text>> ] [ line>> 1- ] [ column>> 1+ ] tri at-pos t ] }
|
||||||
[ swap hash>> at* ] } case ;
|
[ swap hash>> at* ]
|
||||||
|
} case ;
|
||||||
|
|
||||||
: with-global-lexer ( quot -- result )
|
: with-global-lexer ( quot -- result )
|
||||||
[ f lrstack set
|
[
|
||||||
V{ } clone error-stack set H{ } clone \ heads set
|
f lrstack set
|
||||||
H{ } clone \ packrat set ] f make-assoc <lex-hash>
|
V{ } clone error-stack set H{ } clone \ heads set
|
||||||
|
H{ } clone \ packrat set
|
||||||
|
] f make-assoc <lex-hash>
|
||||||
swap bind ; inline
|
swap bind ; inline
|
||||||
|
|
||||||
: parse* ( parser -- ast ) compile
|
: parse* ( parser -- ast )
|
||||||
[ execute [ error-stack get first throw ] unless* ] with-global-lexer
|
compile
|
||||||
ast>> ;
|
[ execute [ error-stack get first throw ] unless* ] with-global-lexer
|
||||||
|
ast>> ;
|
||||||
|
|
||||||
: create-bnf ( name parser -- ) reset-tokenizer [ lexer get skip-blank parse* parsed ] curry
|
: create-bnf ( name parser -- )
|
||||||
define word make-parsing ;
|
reset-tokenizer [ lexer get skip-blank parse* parsed ] curry
|
||||||
|
define-syntax ;
|
||||||
|
|
||||||
SYNTAX: ON-BNF:
|
SYNTAX: ON-BNF:
|
||||||
CREATE-WORD reset-tokenizer ";ON-BNF" parse-multiline-string parse-ebnf
|
CREATE-WORD reset-tokenizer ";ON-BNF" parse-multiline-string parse-ebnf
|
||||||
|
|
Loading…
Reference in New Issue