diff --git a/doc/site/syntax.markdown b/doc/site/syntax.markdown index 846c3dec..ebc6386c 100644 --- a/doc/site/syntax.markdown +++ b/doc/site/syntax.markdown @@ -2,6 +2,11 @@ Wren's syntax is designed to be familiar to people coming from C-like languages while being as simple and expressive as possible within that framework. +Scripts are stored in plain text files with a `.wren` file extension. Wren does +not compile ahead of time: programs are run directly from source, from top to +bottom like a typical scripting language. (Internally, programs are compiled to +bytecode for efficiency, but that's an implementation detail). + ## Comments Line comments start with `//` and end at the end of the line: @@ -9,45 +14,55 @@ Line comments start with `//` and end at the end of the line: :::wren // This is a comment. -Block comments start with `/*` and end with `*/`. They can span multiple lines or be within a single one. Unlike C, block comments can nest in Wren: +Block comments start with `/*` and end with `*/`. They can span multiple lines +or be within a single one. Unlike C, block comments can nest in Wren: :::wren /* This is /* a nested */ comment. */ -## Literals +## Reserved Words -Wren currently supports a few atomic types: booleans, numbers, strings, and the null type. Numbers are double-precision floating point values, and strings are text. Wren doesn't support a lot of fancy formats for them yet, just the basic: +Some people like to see all of the reserved words in a programming language in +one lump. If you're one of those folks, here you go: :::wren - 0 - 1234 - -432.1 - "a string" - "another string" - "supported escapes: \" \n \\" + class else false fn for if is null + return static this true var while -Wren also has a couple of special values: +## Newlines -* `null` indicates the absence of a value. -* `this` inside a method refers to the method's receiver. -* `true` and `false` are boolean values. - -## Variables - -Variables are named references to values. Naming rules mostly follow C. They start with a letter and can contain letters, digits, and underscores (`_`). Some examples: +Like many scripting languages, newlines are significant in Wren and are used to +separate statements. You can keep your semicolons safely tucked away. :::wren - foo - Bar - bestFriends4eva - under_score + // Two statements: + io.write("hi") + io.write("bye") -Variables can be declared using `var`: +Sometimes, though, you want to wrap a single statement on multiple lines. To +make that easier, Wren has a very simple rule. It will ignore a newline +following any token that can't end a statement. Specifically, that means any of +these: :::wren - var pie = "pumpkin" + ( [ { . , * / % + - | || & && ! ~ = < > <= >= == != + class else if is static var while -**TODO: Scoping** +Everywhere else, a newline is treated just like a `;`. + +## Names + +Identifiers are similar to other programming languages. They start with a letter or underscore and may contain letters, digits, and underscores. Case is sensitive. + + :::wren + hi + camelCase + PascalCase + _under_score + abc123 + ALL_CAPS + +Identifiers that start with underscore (`_`) are special in Wren. They are used to indicate fields and private members of classes. ## Method calls