Lox
// Your first Lox program!
print "Hello, world!";
- Dynamic typing
- Automatic memory management
- Data Types
- Booleans
- Numbers
- Strings
- Nil
- Expressions
- Arithmetic
- Comparison and equality
- Logical operators
- Precedence and grouping
- Statements
- Variables
- Control Flow
- Functions
- Closures
- Classes
A Grammar for Lox expressions
- Literals. Numbers,strings,Booleans, and nil
- Unary expressions. A prefix ! to perform a logical not, and - to negate a number.
- Binary expressions. The infix arithmetic(+,-,*,/) and logic operators (==, !=, <, <=,>,>=)
Parentheses. A pair of ( and ) wrapped around and expression.
expression → literal
| unary
| binary
| grouping ;
literal → NUMBER | STRING | "true" | "false" | "nil" ;
grouping → "(" expression ")" ;
unary → ( "-" | "!" ) expression ;
binary → expression operator expression ;
operator → "==" | "!=" | "<" | "<=" | ">" | ">="
| "+" | "-" | "*" | "/" ;
| Name |
Operators |
Associates |
| Equality |
== != |
Left |
| Comparison |
> >= < <= |
Left |
| Term |
- + |
Left |
| Factor |
/ * |
Left |
| Unary |
! - |
Right |
expression → equality ;
equality → comparison ( ( "!=" | "==" ) comparison )* ;
comparison → term ( ( ">" | ">=" | "<" | "<=" ) term )* ;
term → factor ( ( "-" | "+" ) factor )* ;
factor → unary ( ( "/" | "*" ) unary )* ;
unary → ( "!" | "-" ) unary
| primary ;
primary → NUMBER | STRING | "true" | "false" | "nil"
| "(" expression ")" ;