Skip to content

Instantly share code, notes, and snippets.

@Irwin1985
Created October 23, 2020 07:49
Show Gist options
  • Save Irwin1985/b229a5f2a7d49ad2819c206c3743d19b to your computer and use it in GitHub Desktop.
Save Irwin1985/b229a5f2a7d49ad2819c206c3743d19b to your computer and use it in GitHub Desktop.
Rhodus - EBNF
program = statementList [';' statementList] endOfStream
statementList = statement {[';'] statement}
statement = assignmentStmt
| forStmt
| ifStmt
| whileStmt
| repeatStmt
| returnStmt
| breakStmt
| functionStmt
| endOfStream
assignmentStmt = variable '=' expression
variable = simpleVariable | indexVariable
simpleVariable = identifier
indexVariable = simpleVariable '[' expressionList ']'
list = '{' [expressionList] '}'
expressionList = expression {';' expression}
expression = relationalExpr | relationalExpr booleanOp relationalExpr
relationalExpr = simpleExpr | simpleExpr relationalOp simpleExpr
simpleExpr = term {addOp term}
term = factor {mulOp factor}
factor = '(' expression ')' | variable | number | string | NOT factor | list | functionCall
power = {addOp} factor ['^' power]
function = FUNCTION identifier '(' [argumentList] ')' functionBody
functionBody = statementList END
argumentList = argument {';' argument}
argument = identifier | REF variable
returnStmt = RETURN expression
breakStmt = BREAK
functionCall = identifier '(' [expressionList] ')'
addOp = '+' | '-'
mulOp = '*' | '/' | MOD | DIV
relationalOp = '==' | '!=' | '<' | '<=' | '>' | '>='
booleanOp = AND | OR | XOR
whileStmt = WHILE expression DO statementList END
repeatStmt = REPEAT statementList UNTIL expression
forStmt = FOR identifier '=' forList DO statementList END
forList = value TO value | value DOWNTO value
ifStmt = IF expression THEN statementList ifEnd
ifEnd = ELSE statementList END | END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment