// Threads, Reference declarations and parameters, extending functionsthreads
module CINF-SYNTAX
syntax Literal ::= Int | String | Bool | "cout" | "cin" | "endl"
syntax Id ::= "main"
syntax Expression ::=
Literal
| Id
| "(" Expression ")" [bracket]
| Expression "(" Expression ")"
| Expression "(" ")"
| "++" Expression
| "--" Expression
| Expression "++"
| Expression "--"
> UnaryOperator Expression
> left:
Expression "*" Expression [left]
| Expression "/" Expression [left]
| Expression "%" Expression [left]
> left:
Expression "+" Expression [left]
| Expression "-" Expression [left]
> left:
Expression "<" Expression [left]
| Expression ">" Expression [left]
| Expression "<=" Expression [left]
| Expression ">=" Expression [left]
| Expression "!=" Expression [left]
| Expression "==" Expression [left]
> Expression "&&" Expression [left]
> Expression "||" Expression [left]
> left:
Expression "<<" Expression [left]
| Expression ">>" Expression [left]
> Expression "=" Expression [right]
> Expression "," Expression [right]
syntax UnaryOperator ::=
"+" | "-" | "!"
syntax "+" -/- [\+]
syntax "++" -/- [\+]
syntax "-" -/- [\-]
syntax "--" -/- [\-]
syntax StatementSeq ::=
Statement
| Statement StatementSeq
syntax Statement ::=
BlockStatement
| BlockDeclaration
syntax BlockStatement ::=
Expression ";"
| ";"
| CompoundStatement
| "if" "(" Expression ")" Statement
| "if" "(" Expression ")" Statement "else" Statement
| "while" "(" Expression ")" Statement
| "return" Expression ";"
| "return" ";"
syntax CompoundStatement ::=
"{" StatementSeq "}"
| "{" "}"
syntax DeclarationSeq ::=
Declaration
| Declaration DeclarationSeq
syntax Declaration ::=
"#" "include" "<iostream>"
| BlockDeclaration
| TypeSpecifier Id "(" ParameterDeclarationList ")" Declarator CompoundStatement
syntax BlockDeclaration ::=
"using" "namespace" "std" ";"
| TypeSpecifier InitDeclaratorList ";"
| "std::thread" Id "(" Id "," Expression ")" ";"
| "std::thread" Id "(" Id ")" ";"
syntax TypeSpecifier ::=
"bool"
| "int"
| "void"
syntax InitDeclaratorList ::=
InitDeclarator
| InitDeclarator "," InitDeclaratorList
syntax InitDeclarator ::=
Declarator
| Declarator "=" Expression
syntax Declarator ::=
Id
| Id "=" Expression"&" Id
| "(" Declarator ")" [bracket]
| Declarator "(" ParameterDeclarationList ")"
syntax ParameterDeclarationList ::=
List{ParameterDeclaration, ","}
syntax ParameterDeclaration ::=
TypeSpecifier IdDeclarator
| TypeSpecifier AbstractDeclarator
syntax AbstractDeclarator ::=
"*"
| "&"
| "(" AbstractDeclarator ")" [bracket]
| AbstractDeclarator "(" ParameterDeclarationList ")"
> "*" AbstractDeclarator
syntax TranslationUnit ::=
DeclarationSeq
endmodule