Subcollections
SET_TYPES = { "bool", "char", "float", "int", "string" } SET_LITERALS = { <boolean_literal>, <char_literal>, <float_literal>, <int_literal>, <string_literal> } SET_INSTRUCTIONS = { "label", "break", "continue", "if", "goto", "while", "do", "switch", "return", ";" } SET_UNARIES = { "&", "*", "~", "+", "-", "!" }
module
module: "module" <identifier> ";" globals.
globals
globals: e. globals: global globals. globals: "extern" global globals.
global
global: function. global: declaration.
function
function: functionheader functionrest.
functionheader
functionheader: modifiers <identifier> ":" paramlist "->" returntype.
functionrest
functionrest: ";". functionrest: block.
modifiers:
modifiers: e. modifiers: "start".
paramlist
paramlist: "void". paramlist: paramblock moreparamblocks.
moreparamblocks
moreparamblocks: e. moreparamblocks: ";" paramblock moreparamblocks.
paramblock
paramblock: type param moreparams.
moreparams
moreparams: e. moreparams: "," param moreparams.
param
param: reference <identifier> dimensionblock.
returntype
returntype: type reference dimensionblock.
reference
reference: e. reference: "*" reference.
dimensionblock
dimensionblock: e. dimensionblock: "[" "]" dimensionblock.
block
block: "{" code "}".
code
code: e. code: block code code: statement code.
statement
statement: "label" <identifier> ";" statement: ";" statement: "break" ";" statement: "continue" ";" statement: expression ";" statement: declarationblock ";" statement: "if" "(" expression ")" block elseblock statement: "goto" <identifier> ";" statement: "while" "(" expression ")" "do" block statement: "do" block "while" "(" expression ")" ";" statement: "switch" "(" expression ")" "{" switchcases "default" block "}" statement: "return" returnarg ";".
returnarg
returnarg: "(" expression ")". returnarg: e.
elseblock
elseblock: e. elseblock: "else" block.
switchcases
switchcases: e. switchcases: "case" <int_literal> block swithcases.
declarationblock
declarationblock: type declaration restdeclarations.
restdeclarations
restlocals: e. restlocals: "," declaration restdeclarations.
declaration
local: reference <identifier> indexblock initializer.
indexblock
indexblock: e. indexblock: "[" <int_literal> "]" indexblock.
initializer
initializer: e. initializer: "=" expression.
expression
expression: logicalor restexpression.
restexpression
restexpression: e. restexpression: "=" logicalor restexpression.
logicalor
logicalor: logicaland restlogicalor.
restlogicalor
restlogicalor: e. restlogicalor: "||" logicaland restlogicalor.
logicaland
logicaland: bitwiseor restlogicaland.
restlogicaland
restlogicaland: e. restlogicaland: "&&" bitwiseor restlogicaland.
bitwiseor
bitwiseor: bitwisexor restbitwiseor.
restbitwiseor
restbitwiseor: e. restbitwiseor: "|" bitwisexor restbitwiseor.
bitwisexor
bitwisexor: bitwiseand restbitwisexor.
restbitwisexor
restbitwisexor: e. restbitwisexor: "^" bitwiseand restbitwisexor.
bitwiseand
bitwiseand: equality restbitwiseand.
restbitwiseand
restbitwiseand: e. restbitwiseand: "&" equality restbitwiseand.
equality
equality: relation restequality.
restequality
restequality: e. restequality: equalityoperator relation restequality.
equalityoperator
equalityoperator: "==". equalityoperator: "!=".
relation
relation: shift restrelation.
restrelation
restrelation: e. restrelation: relationoperator shift restrelation.
relationoperator
relationoperator: "<". relationoperator: "<=". relationoperator: ">". relationoperator: ">=".
shift
shift: addition restshift.
restshift
restshift: e. restshift: shiftoperator addition restshift.
shiftoperator
shiftoperator: "<<". shiftoperator: ">>".
addition
addition: multiplication restaddition.
restaddition
restaddition: e. restaddition: additionoperator multiplication restaddition.
additionoperator
additionoperator: "+". additionoperator: "-".
multiplication
multiplication: unary3 restmultiplication.
restmultiplication
restmultiplication: e. restmultiplication: multiplicationoperator unary3 restmultiplication.
multiplicationoperator
multiplicationoperator: "*". multiplicationoperator: "/". multiplicationoperator: "%".
unary3
unary3: unary2 unary3: unary3operator unary3.
unary3operator:
unary3operator: "&". unary3operator: "*". unary3operator: "~".
unary2
unary2: factor. unary2: unary2operator unary2.
unary2operator
unary2operator: "+". unary2operator: "-". unary2operator: "!".
factor
factor: <identifier> application. factor: immediate. factor: "(" expression ")".
application
application: e. application: "[" expression "]" application. application: "(" expression moreexpressions ")".
moreexpressions
moreexpressions: e. moreexpressions: "," expression morexpressions.
type
type: "bool". type: "char". type: "float". type: "int". type: "string".
immediate
immediate: <boolean_literal>. immediate: <char_literal>. immediate: <float_literal>. immediate: <int_literal>. immediate: <string_literal>. |