Lexical Conventions¶
Coco File Encoding¶
Coco files must be UTF-8 encoded.
Comments¶
Coco supports comments in the style of C++:
//starts a single-line comment, which finishes at the end of a line./*starts a multi-line comment, which finishes at*/. Multi-line comments may be nested.
Coco is otherwise not whitespace-sensitive: multiple consecutive whitespace characters behave identically to a single one.
Keywords¶
The keywords of the language are:
| abstract | after | as | assertion |
| async | attribute | attributes | await |
| become | behaviour | break | case |
| class | component | continue | defer |
| else | entry | enum | execution |
| exit | external | final | for |
| function | if | illegal | import |
| in | incoming | inherit | init |
| inout | instance | interleave | internal |
| machine | match | module | monitor |
| mut | mutable | mutating | nondet |
| object | offer | optional | otherwise |
| out | outgoing | periodic | port |
| private | property | protected | public |
| return | signal | spontaneous | state |
| static | struct | test | testcase |
| trace | trait | type | unqualified |
| val | var | verify | where |
| while |
Contextual Keywords¶
There are also some keywords that are only keywords in certain contexts.
| Keyword | Language Standard | Context |
|---|---|---|
ambiguous |
>= 1.1 |
Port function and signal declarations |
call |
>= 1.1 && < 1.2 |
Port function and signal declarations |
drainQueue |
>= 1.1 |
Port function and signal declarations |
end |
>= 1.2 |
Port function and signal declarations |
send |
>= 1.1 |
Port function and signal declarations |
start |
>= 1.2 |
Port function and signal declarations |
timer |
>= 1.1 |
Port function and signal declarations |
unused |
>= 1.1 |
Port function and signal declarations |
Identifiers¶
Identifiers are used to give names to entities. In Coco, an identifier must begin with a capital or lowercase
letter (i.e. A to Z or a to z), or an underscore (_),
and can be followed by letters, digits (0 to 9), or underscores (_) only.
-
syntax
Identifier¶ «identifier» := «alpha»[«alphanum»] «alpha» := A..Z | a..z | _ «alphanum» := «alpha» | 0..9
-
syntax
Dot Identifier List¶
A compound identifier is a non-empty sequence of identifiers separated by a dot (.).
Compound identifiers are used to qualify identifiers within a particular namespace.
Literals¶
There are three kinds of literals in Coco, namely integer, character and string literals.
-
syntax
Literal¶ «integer» | «character» | «string»
where:
- integer represents integer literals, consisting of the digits 0-9.
- character represents character literals, consisting of a single UTF-8 encoded character enclosed by single quotes (
'). - string represents string literals, consisting of UTF-8 encoded characters enclosed by double quotes (
").
The following escape sequences are also supported for character and string literals: newline (\n),
carriage return (\r), horizontal tab (\t), null (\0), backslash (\\), double quotation mark (\"), and
single quotation mark (\').