In this chapter, we describe the constructs available in the Bogor modeling language. We use grammar in the Extended Backus-Naur Form (EBNF) to describe BIR production rules and regular expression to denote lexical definitions of terminal symbols. For simplicity, we often use double quotes (") to denote terminal symbols. For example, "system" denotes the terminal symbol equivalent to the regular expression 's' 'y' 's' 't' 'e' 'm', where the single quotes (') denote characters. We use angle brackets to denote non-terminal symbols (e.g., <system>). We also liberally use angle brackets to denote terminal symbols defined using regular expressions.
In the following sections, we describe each BIR construct in details. For each construct, we give its concrete syntax and some well-formed-ness rules. When describing the concrete syntax grammar, we will choose readability of the grammar over ambiguity issues. However, in some important cases, we will explicitly present the issues and how we resolve them. We use paragraphs with "Namespace" as the header to describe namespaces of BIR constructs (whenever applicable). Identifiers that belong to the same namespace must be distinct. In some cases, a namespace can be shadowed by another namespace; we will explicitly describe the well-formed-ness rules in those cases.
We also give the Java abstract syntax tree (AST) class for each construct in paragraphs with "Abstract Syntax Tree" as the header.