lexer: make CHAR: ! work.
parent
52a3f6f309
commit
77c256412d
|
@ -94,9 +94,22 @@ M: lexer skip-word
|
||||||
: still-parsing-line? ( lexer -- ? )
|
: still-parsing-line? ( lexer -- ? )
|
||||||
check-lexer [ column>> ] [ line-length>> ] bi < ;
|
check-lexer [ column>> ] [ line-length>> ] bi < ;
|
||||||
|
|
||||||
DEFER: parse-token
|
: (parse-raw) ( lexer -- str )
|
||||||
|
check-lexer {
|
||||||
|
[ column>> ]
|
||||||
|
[ skip-word ]
|
||||||
|
[ column>> ]
|
||||||
|
[ line-text>> ]
|
||||||
|
} cleave subseq ;
|
||||||
|
|
||||||
<PRIVATE
|
: parse-raw ( lexer -- str/f )
|
||||||
|
dup still-parsing? [
|
||||||
|
dup skip-blank
|
||||||
|
dup still-parsing-line?
|
||||||
|
[ (parse-raw) ] [ dup next-line parse-raw ] if
|
||||||
|
] [ drop f ] if ;
|
||||||
|
|
||||||
|
DEFER: parse-token
|
||||||
|
|
||||||
: skip-comments ( lexer str -- str' )
|
: skip-comments ( lexer str -- str' )
|
||||||
dup "!" = [
|
dup "!" = [
|
||||||
|
@ -105,22 +118,8 @@ DEFER: parse-token
|
||||||
nip
|
nip
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
PRIVATE>
|
|
||||||
|
|
||||||
: (parse-token) ( lexer -- str )
|
|
||||||
dup check-lexer {
|
|
||||||
[ column>> ]
|
|
||||||
[ skip-word ]
|
|
||||||
[ column>> ]
|
|
||||||
[ line-text>> ]
|
|
||||||
} cleave subseq skip-comments ;
|
|
||||||
|
|
||||||
: parse-token ( lexer -- str/f )
|
: parse-token ( lexer -- str/f )
|
||||||
dup still-parsing? [
|
dup parse-raw [ skip-comments ] [ drop f ] if* ;
|
||||||
dup skip-blank
|
|
||||||
dup still-parsing-line?
|
|
||||||
[ (parse-token) ] [ dup next-line parse-token ] if
|
|
||||||
] [ drop f ] if ;
|
|
||||||
|
|
||||||
: ?scan-token ( -- str/f ) lexer get parse-token ;
|
: ?scan-token ( -- str/f ) lexer get parse-token ;
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ IN: bootstrap.syntax
|
||||||
"f" [ f suffix! ] define-core-syntax
|
"f" [ f suffix! ] define-core-syntax
|
||||||
|
|
||||||
"CHAR:" [
|
"CHAR:" [
|
||||||
scan-token {
|
lexer get parse-raw [ "token" throw-unexpected-eof ] unless* {
|
||||||
{ [ dup length 1 = ] [ first ] }
|
{ [ dup length 1 = ] [ first ] }
|
||||||
{ [ "\\" ?head ] [ next-escape >string "" assert= ] }
|
{ [ "\\" ?head ] [ next-escape >string "" assert= ] }
|
||||||
[ name>char-hook get call( name -- char ) ]
|
[ name>char-hook get call( name -- char ) ]
|
||||||
|
|
Loading…
Reference in New Issue