In this course we will be creating a small programming language called CatScript
catscript_program = { program_statement };
program_statement = statement |
function_declaration;
statement = for_statement |
if_statement |
print_statement |
variable_statement |
assignment_statement |
function_call_statement;
for_statement = 'for', '(', IDENTIFIER, 'in', expression ')',
'{', { statement }, '}';
if_statement = 'if', '(', expression, ')', '{',
{ statement },
'}' [ 'else', ( if_statement | '{', { statement }, '}' ) ];
print_statement = 'print', '(', expression, ')'
variable_statement = 'var', IDENTIFIER,
[':', type_expression, ] '=', expression;
function_call_statement = function_call;
assignment_statement = IDENTIFIER, '=', expression;
function_declaration = 'function', IDENTIFIER, '(', parameter_list, ')' +
[ ':' + type_expression ], '{', { function_body_statement }, '}';
function_body_statement = statement |
return_statement;
parameter_list = [ parameter, {',' parameter } ];
parameter = IDENTIFIER [ , ':', type_expression ];
return_statement = 'return' [, expression];
expression = equality_expression;
equality_expression = comparison_expression { ("!=" | "==") comparison_expression };
comparison_expression = additive_expression { (">" | ">=" | "<" | "<=" ) additive_expression };
additive_expression = factor_expression { ("+" | "-" ) factor_expression };
factor_expression = unary_expression { ("/" | "*" ) unary_expression };
unary_expression = ( "not" | "-" ) unary_expression | primary_expression;
primary_expression = IDENTIFIER | STRING | INTEGER | "true" | "false" | "null"|
list_literal | function_call | "(", expression, ")"
list_literal = '[', expression, { ',', expression } ']';
function_call = IDENTIFIER, '(', argument_list , ')'
argument_list = [ expression , { ',' , expression } ]
type_expression = 'int' | 'string' | 'bool' | 'object' | 'list' [, '<' , type_expression, '>']
CatScript is statically typed, with a small type system as follows
- int - a 32 bit integer
- string - a java-style string
- bool - a boolean value
- list - a list of value with the type 'x'
- null - the null type
- object - any type of value