grammar Expressive rule program statement* end rule statement whitespace* (list / atom) whitespace* end rule atom (value / identifier) end rule list '(' statement+ ')' end rule value (string / boolean / number) end rule word [a-zA-Z0-9_]+ end rule string '"' ([^"\\] / "\\" . )* '"' end rule number ( float / integer ) end rule integer [0-9]+ end rule float [0-9]+ ('.' [0-9]+) end rule whitespace [\n\r\s\t] end rule parenthesis [\(\)\[\]] end rule boolean ('true' / 'false') end rule delimeter parenthesis / whitespace end rule identifier (!delimeter .)+ end end