misc: adding a syntax-test file.

master
John Benediktsson 2020-06-06 19:04:21 -07:00
parent 61635500f2
commit 0a8cb5f2c1
1 changed files with 293 additions and 0 deletions

293
misc/syntax-test.factor Normal file
View File

@ -0,0 +1,293 @@
#!/usr/bin/env foo
! Comments
! Normal comments
! More comments
/* C
style
comments */
/* comment */
/* multline ( x -- y )
2 comment */
6 /* something else */ 2 +
! Imports
USING: vocabularies ... ;
USE: vocabulary
UNUSE: vocabulary
IN: vocabulary
FROM: vocab => words ... ;
EXCLUDE: vocab => words ... ;
QUALIFIED: vocab
QUALIFIED-WITH: vocab word-prefix
RENAME: word vocab => new-name
ALIAS: new-word existing-word
DEFER: word
FORGET: word
POSTPONE: word
! Classes
MIXIN: class
TUPLE: class slots ... ;
TUPLE: class < superclass slots ... ;
BUILTIN: class slots ... ;
INSTANCE: instance mixin
SINGLETON: class
SINGLETONS: words ... ;
PREDICATE: class < superclass predicate... ;
! Examples
TUPLE: interval-map { array array read-only } ;
BUILTIN: string { length array-capacity read-only initial: 0 } aux ;
! Definitions
: word ( x -- ) drop ;
:: word ( x -- ) x drop ;
TYPED: word ( a b: class ... -- x: class y ... ) body ;
TYPED:: word ( a b: class ... -- x: class y ... ) body ;
MACRO: word ( inputs... -- ) definition... ) ;
MACRO:: word ( vars... -- outputs... ) definition... ) ;
M: class generic (definition) ... ;
M:: class generic ( vars... -- outputs... ) body... ;
GENERIC: word ( stack -- effect )
HOOK: word variable ( stack -- effect )
GENERIC#: word 1 ( stack -- effect )
MATH: + ( x y -- z ) foldable flushable
SLOT: name
C: <foo> foo
! Alien
LIBRARY: name
TYPEDEF: old new
ENUM: type words... ;
ENUM: type < base-type words...
FUNCTION: return name ( parameters ) ;
FUNCTION-ALIAS: factor-name return name ( parameters ) ;
! Symbols and literals
\ foo
$ foo
M\ foo bar
MAIN: word
CONSTANT: word value
SYMBOL: word
SYMBOLS: words ... ;
C: <foo> foo
! Math
1 2 +
3 4 -
5 6 *
7 8 /
32 2^
10 10^
! Examples
[ 1 ] unless*
>boolean
<wrapper>
+@
H{ } assoc-empty?
5 >bignum
1 2 pick set-nth
5 f <array>
(clone)
! Strings
""
"test"
SBUF" foo"
SBUF" hello world "
"\s"
"\\foo"
"\"hello\""
"\a\b\e\f\n\r\t\s\v\s\0\\\""
"\x01\xaF\uffffff"
URL" http://google.com"
R" asdf"
"""">json""""
! Triple quote strings (old Factor)
"""hello, world"""
""" hello, world """
"""this is a
multiline string"""
! Multiline strings
[=[this is a weird new string]=]
! Containers
H{ { 1 2 } }
HS{ 1 2 3 }
{ 4 5 6 }
V{ "asdf" 5 }
${ 1 foo 3 }
! Quotations
[ 2^ * ]
'[ _ sqrt ]
$[ 1 2 + ]
! Tuples
T{ foo f 1 2 3 }
T{ foo { a 5 } }
! Symbols are colored wrong:
: rock ( -- ) \ rock computer play. ;
! SBUF is colored wrong:
SBUF" " clone swap [ " " append ] [ number>string append ] interleave
! Update to new library words:
key? and assoc-empty? are not colored
tail* is not highlighted
! IN poker, unicode characters:
t
f
CHAR: -
CHAR: a
CHAR: symbol-for-end-of-transmission
CHAR: snowman
{ CHAR: a CHAR: S }
{ CHAR: b CHAR: D }
{ CHAR: c CHAR: H }
{ CHAR: d CHAR: C }
! New number literals:
0xCAFEBABE
0o432
0b10101
1,000
10,000
1e10
-1.5e-5
! Weird numbers
1,234+56/78
+1/3
1+1/3
-1/3
-1-1/3
-1,234-1/34
1.
+1.5
-1.5e30
1.5e-30
1,000.1,2
0xCAFEBABE
0x1AB4p30
0b10101
0o1234567
NAN: CAFE1234
NAN: 0
! Not numbers
1foo
1.5bar
+foo
-bar
*baz
qux*
/i
(1string)
?1+
! Comments in STRUCT: definitions
! STRUCT: features like bitfields, etc.
STRUCT: foo
{ a int initial: 0 } ! a comment
{ b c-string }
{ c char[4] }
{ d void* }
{ e int bits: 8 }
;
! Stack effects
( -- )
( x -- )
( x -- x )
( x x -- x )
( x x -- x x )
( quot: ( a -- b ) -- )
( x quot: ( a -- b ) -- y )
( ..a quot: ( ..a x -- ..b ) -- ..b )
( x n -- (x)n )
( m: integer -- n: float )
( :integer -- :float )
( x -- y )
! Weird stuff:
key?
key?thing
flushablething
flushable
<PRIVATEfoo
"asdf"foo
<< 5 1 + . >> 1
: foo ( x -- y ) foo>> + ; inline
+@
+byte+
pair?
tail?
0.1
,0.1 ! wrong
10,0.1
1.23
.1
-.1
-0.1
-0,1.1
1.
. ! wrong
-. ! wrong
! Regexp is colored wrong (on Github):
: using-line ( source -- vocabs )
R/ USING: [^;]* ;/s all-matching-subseqs ?first
[ { } ] [ " \n" split rest but-last ] if-empty ;