///////////////////////////////////////////////////////////////////////////// /// Copyright 2013 William R Cooke /// @file grammar.txt /// @brief grammar description for embasic ///////////////////////////////////////////////////////////////////////////// program = stlist "END" sublist stlist = statement { separator statement} sublist = {sub} sub = procedure | function | interrupt procedure = "PROCEDURE" ident [ paramaterlist ] [ import ] stlist "END" function = "FUNCTION" ident parameterlist [import] stlist "END" interrupt = "INTERRUPT" ident [import] stlist "END" statement = assignment | declaration | if_st | proc_st | while_st | repeat_st | for_st | case_st | return_st | null_st assignment = variable "=" exp declaration = ( "DIM" | "CONSTANT" | "STATIC" | "ROM" | "NONVOLATILE" ) ident [ "(" exp ")" ] [ "AS" ( "BYTE" | "INTEGER" | "WORD" | "LONG" | "SINGLE" | "DOUBLE" | "STRING"] [ "AT" exp ] if_st = "IF" exp "THEN" stlist [ "ELSE" stlist ] "END" proc_st = ident [ paramlist] while_st = "WHILE" exp "DO" stlist "END" repeat_st = "REPEAT" stlist "UNTIL" exp for_st = "FOR" variable '=' exp "TO" exp ["STEP" exp] stlist "END" case_st = return_st = "RETURN" [ exp ] null_st = exp = lterm { ("OR" | "XOR") lterm } lterm = lfactor { "AND" lfactor } lfactor = simpexp { ( "=" | "<>" | "<" | ">" | "<=" | ">=") } simpexp = term { ('+' | '-') term } term = factor { ("*" | "/" | "MOD") factor } factor = literal | constant | variable | funcall | "(" exp ")" | "-" factor | "NOT" factor literal = int | float | char | string constant = ident "(" dimlist ")" variable = ident "(" dimlist ")" funcall = ident "(" parmlist ")"