| REBOL 3 Docs | Guide | Concepts | Functions | Datatypes | Errors |
| TOC < Back Next > | Updated: 20-Nov-2013 Edit History |
To create REBOL scripts, you need to understand its basic syntax.
Languages are built on lexicon, grammar, and semantics.
| lexicon | are the written symbols of the language - its literal syntax. The lexicon is what defines that 123 is an integer and "ok" is a string. |
| grammar | provides rules that control the order of symbols used to form expressions. It is what makes a line like "print 1 + 2" have meaning as a sequence of symbols, just as sentences do in natural languages. |
| semantics | associates meaning to symbols and values, and in an interpreter such as REBOL, also performs computation. |
REBOL's lexicon is advanced, because it allows many datatypes to be directly expressed. However, its basic grammar is very simple - mostly functions with arguments, but it does allow specialized grammars, dialects of the language. This gives the language some real power to build a wide range of expressions. And, REBOL's semantics are quite different - based on rules of context and association.
That's enough about theory for now. Let's get into some details.
Both code and data are combinations of elements called
| values | the datatypes of the language |
Important values are
| words | notated in a few ways. |
| blocks | combinations of values. |
There are also
| comments | text that is ignored by the language |
White-space is used in general for delimiting (for separating values).
This is especially important because words may contain characters such as + and -.
For example, this line is an expression consisting of 5 words:
a + b - c
, while this line is actually a single word a+b-c
a+b-c
Other special characters are
| [ ] | mark the start and end of a block |
| ( ) | mark the start and end of a paren |
| / | used to "glue together" paths |
| { } | mark the start and end of a string |
| " " | mark the start and end of a short string fitting into one line of text |
| ; | mark the start of a comment to the end of line |
Words are used for symbols and variable names.
They are formed from a non-numeric character followed by alphabetic characters:
print show next image on off true false one none good1
They can include hyphens and other special characters:
+ - ` * ! ~ & ? |
So, you can make words like:
number? time? date! image-files l'image ++ -- == +- ***** *new-line*
Words are not case sensitive, but casing is preserved:
state = State = STATE
The end of a word is marked by a white-space character, end of text or one of the characters:
] ) /
More on words can be found in the next section, code: words and variables.
Values are the raw data of REBOL.
A wide variety of values can be written directly. No special constructor is required. You simply write the values as is.
The language strives to use human-friendly forms for values. This makes scripts more readable. In addition, it accepts more than one format for some values to allow for international variations.
Numeric data:
1234 -432 5'678 ; integer 3.1415 1.23E12 0,01 1,2E12 ; decimal 1% 100% 12.34% 1234% ; percent $12.34 ; money (arbitrary precision) 3.1.5 ; version numbers 255.255.0.100 ; colors 199.4.80.7 ; network addresses 5x10 100x100 -50x-25 ; x/y coordinates/sizes
Times and dates:
12:34 20:05:32 -0:25.34 20-Apr-2008 20-4-1998 20-Apr-1998/12:32 ; date and time 20-Apr-1998/12:32-8:00 ; with timezone
Strings and bytes:
"Here is a string"
{Here is another way to write
a string that spans many lines
and contains "quoted" strings.}
#{0A6B14728C4DBEF5} ; hex encoded
64#{45kLKJOIU8439LKJklj} ; base-64 encoded
Special strings, such as files, tags, URLs, and email forms:
%data.txt %images/photo.jpg %../scripts/*.r <title> </body> <font size="2" color="blue"> http://www.rebol.com ftp://ftp.rebol.com/sendmail.r info@rebol.com bill-smity@example.com
More details are found in expressions: values.
Words and values are grouped into blocks, enclosed in square brackets [].
Within a block, values and words can be organized in any order and can span any number of lines.
Example blocks:
[1 2 3 4.0 5% $6.00]
[white red green blue yellow orange black]
["Spielberg" "Back to the Future" 1:56:20 MCA]
[
"Bill" billg@ms.com #315-555-1234
"Steve" jobs@apl.com #408-555-4321
"Ted" ted@gw2.com #213-555-1010
]
[
"John" 6894 0:55:68
"Dion" 68861 0:61:35
"Floyd" 46001 0:50:12
]
if time > 10:30 [send jim news]
loop 100 [print/only "*"]
sites: [
http://www.rebol.com [save %reb.html data]
http://www.cnn.com [print data]
ftp://www.amiga.com [send cs@org.foo data]
]
foreach [site action] sites [
data: read site
do action
]
You can see that both code and data use blocks.
A single-line comment is made with a semicolon. Everything following the semicolon to the end of the line is part of the comment:
; Settings follow below: quality: 100 ; set to the highest quality
Another form of comments also exists. See scripts: comments for more.
| TOC < Back Next > | REBOL.com - WIP Wiki | Feedback Admin |