Clef Programming Languages, Syntax

Note, this is not yet correct or complete

program ::= function_definition_list compound_stmt

function_definition_list ::=
function_definition_list ::= function_definition function_definition_list

function_definition ::= identifier ( parameter_list > optional_variable_declaration compound_stmt

parameter_list ::=
parameter_list ::= identifier , parameter_list

optional_variable_list ::=
optional_variable_list ::= var variable_list ;

variable_list ::= identifier
variable_list ::= identifier , variable_list

statement ::= expression ;
statement ::= if ( expression ) statement
statement ::= if ( expression ) statement else statement statement ::= while ( expression ) statement
statement ::= return expression ; statement ::= compound_stmt

compound_stmt ::= { stmt_list }

expression ::= integer
expression ::= identifier
expression ::= symbol
expression ::= function_call
expression ::= assignment
expression ::= ( expression )
expression ::= - expression
expression ::= ! expression
expression ::= expression + expression
expression ::= expression - expression
expression ::= expression * expression
expression ::= expression / expression
expression ::= expression % expression
expression ::= expression == expression
expression ::= expression != expression
expression ::= expression < expression
expression ::= expression > expression
expression ::= expression <= expression
expression ::= expression >= expression
expression ::= expression && expression
expression ::= expression || expression

function_call ::= identifier ( argument_list )

argument_list ::=
argument_list ::= expression , parameter_list