Created
October 23, 2020 07:49
-
-
Save Irwin1985/b229a5f2a7d49ad2819c206c3743d19b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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