## Lox ```c // 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. - Syntax tree ``` 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 ")" ; ```