From: John Benediktsson Date: Sun, 7 Jun 2020 02:04:21 +0000 (-0700) Subject: misc: adding a syntax-test file. X-Git-Tag: 0.99~3181 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=0a8cb5f2c1fa1747b741f1e2d3ec090cb43637d0 misc: adding a syntax-test file. --- diff --git a/misc/syntax-test.factor b/misc/syntax-test.factor new file mode 100644 index 0000000000..ea5d915e44 --- /dev/null +++ b/misc/syntax-test.factor @@ -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 + +! 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 + +! Math + + 1 2 + + 3 4 - + 5 6 * + 7 8 / + 32 2^ + 10 10^ + +! Examples + + [ 1 ] unless* + >boolean + + +@ + H{ } assoc-empty? + 5 >bignum + 1 2 pick set-nth + 5 f + (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 + > 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 ;