Lexical Syntax
The following pages describe the Lexical Syntax of Dyvil Files.
Much like in Java, statements have to be terminated using semicolons
;
, usually at the end of a line. In Dyvil however, these semicolons can be omitted in many cases. This is because of a process known as Semicolon Inference, which happens before the Compiler parses Dyvil Files.Example:
public class MyClass
{
var value: int = 0 // ;
static func main(args: [String]) -> void
{
var i = 10 // ;
print i // ;
let my = new MyClass // ;
print( // 1
my, // 2
my. // 3
value,
"value") // ;
print; // 4
print "\( // 5
my)" // ;
if (i >= 20) // 6
{
print "\(i) is greater than 20!" // ;
}
}
}
In the above example, semicolons are implicit in all cases where they are shown in comments. The parses notices that the statement is finished and a newline is present, and thus inserts a semicolon for you. While this usually happens at the end of a line, there are a few exceptions.
Semicolons are not inserted if
- the last token before the newline is
- an opening bracket
(
,[
or{
(1). - a period
.
(2). - a comma
,
(3). - a semicolon
;
(4). - a keyword, excluding
true
andfalse
.break
andcontinue
.this
andsuper
.
- the start or a part of a String Interpolation Literal (5).
- the first token of the next line is
- a period
.
. - a comma
,
. - a semicolon
;
. - a part or the end of a String Interpolation Literal.
- an opening curly bracket
{
(6). - a closing bracket
)
,]
or}
.
If there is one or more empty lines between two tokens, a semicolon will always be inserted between them.
Last modified 4yr ago