variableName -> [a-zA-Z0-9-_]+
functionName -> [a-zA-Z0-9-_]+
numberValue -> -?([0-9]+|[0-9]*(.[0-9]+)?)
stringValue -> "[^"]*"
stringValue -> '[^']*'
stringValue -> `[^\`]*`
booleanValue -> true
booleanValue -> false
variableType -> number
variableType -> boolean
variableType -> string
variableTypeProperty -> variableType
variableTypeProperty -> mutable variableType
variableInitialValueProperty -> equal to expression
variableInitialValueProperty -> initialized to expression
variableProperties -> variableTypeProperty
variableProperties -> variableInitialValueProperty
variableProperties -> variableTypeProperty variableInitialValueProperty
variableDeclaration -> Define variable variableName to be variableProperties
assignment -> Set variableName to be expression
increment -> Increase variableName by expression
decrement -> Decrease variableName by expression
print -> Print expression
ifConditionAndStatements -> condition do statements
butIfCondition -> but if ifConditionAndStatements
butIfConditionChain -> butIfCondition butIfConditionChain
butIfConditionChain -> EPSILON
ifCondition -> If ifConditionAndStatements butIfConditionChain End of if
ifCondition -> If ifConditionAndStatements butIfConditionChain Otherwise do statements End of if
whileLoop -> While condition do statements End of while
forLoop -> For variable from expression to expression do statements End of for
param -> variableName as variableTypeProperty
paramsChain -> param
paramsChain -> param , paramsChain
functionParams -> with param paramsChain
functionParams -> EPSILON
returnType -> that return variableType
returnType -> EPSILON
functionDeclaration -> Define function functionName functionParams _returnType do statementsInFunction End of function
returnStatement -> Return expression
argsChain -> EPSILON
argsChain -> expression , argsChain
functionArguments -> EPSILON
functionArguments -> with arg argsChain
returnValueTarget -> EPSILON
returnValueTarget -> then put result into variableName
functionCall -> Call function functionName functionArguments returnValueTarget
expression_atom -> variableName
expression_atom -> numberValue
expression_atom -> stringValue
expression_atom -> booleanValue
expression -> expression_atom greater than expression
expression -> expression_atom less than expression
expression -> expression_atom greater than or equal to expression
expression -> expression_atom less than or equal to expression
expression -> expression_atom equal to expression
expression -> expression_atom not equal to expression
expression -> not expression
expression -> expression_atom and expression
expression -> expression_atom or expression
expression -> expression_atom plus expression
expression -> expression_atom minus expression
expression -> expression_atom multiply expression
expression -> expression_atom divide expression
expression -> expression_atom modulo expression
condition -> expression
statement -> variableDeclaration
statement -> assignment
statement -> increment
statement -> decrement
statement -> multiply
statement -> divide
statement -> print
statement -> ifCondition
statement -> whileLoop
statement -> forLoop
statements -> statement statements
statementInFunction -> returnStatement
statementInFunction -> statement
statementsInFunction -> statementInFunction statementsInFunction
program -> functionDeclaration program
program -> statements program
program -> EPSILON