Examples are provided in here.
program ::= {⟨loc⟩*} ⟨thrd⟩*
⟨thrd⟩ ::= thread String {⟨inst⟩}
⟨inst⟩ ::= ⟨com⟩ | ⟨inst⟩; ⟨inst⟩ | while ⟨pred⟩ {⟨inst⟩} | if ⟨pred⟩ {⟨inst⟩} else {⟨inst⟩}
⟨com⟩ ::= ⟨reg⟩ <- ⟨expr⟩ | ⟨reg⟩ = ⟨loc⟩.load(⟨atomic⟩) | ⟨loc⟩.store(⟨atomic⟩,⟨reg⟩)
⟨atomic⟩ ::= "_sc" | "_rx" | "_acq" | "_rel" | "_con"
⟨pred⟩ ::= Bool | ⟨pred⟩ and ⟨pred⟩ | ⟨pred⟩ or ⟨pred⟩ | not ⟨pred⟩
| ⟨expr⟩ == ⟨expr⟩ | ⟨expr⟩ != ⟨expr⟩
| ⟨expr⟩ < ⟨expr⟩ | ⟨expr⟩ <= ⟨expr⟩
| ⟨expr⟩ > ⟨expr⟩ | ⟨expr⟩ >= ⟨expr⟩
⟨expr⟩ ::= Int | ⟨reg⟩
| ⟨expr⟩ + ⟨expr⟩ | ⟨expr⟩ - ⟨expr⟩
| ⟨expr⟩ * ⟨expr⟩ | ⟨expr⟩ / ⟨expr⟩
| ⟨expr⟩ % ⟨expr⟩