## Lexical Elements{#sec:lexical_elements}

Comments always start with two adjacent hyphens and span to the end of a
line. Here is an example:

~~~~~
-- Here is a comment.

-- a long comment may be split onto
-- two or more consecutive lines
~~~~~

An identifier is defined as a letter followed by zero or more letters,
digits, or single underscores:

~~~~~
ID ::= identifier_letter ( ('_')? letter_or_digit)*

letter_or_digit ::= identifier_letter | digit

identifier_letter ::= ('A'..'Z' | 'a'..'z')

digit ::= (0..9)
~~~~~

Some example identifiers include `Count`, `X`, `Get_Symbol`, `Ethelyn`,
`Snobol_4`, `X1`, `Page_Count`, and `Store_Next_Item`.
**Note: Identifiers are case insensitive**! Thus `Hello`, `HeLlO`, and `HELLO`
all refer to the same entity in AADL.

Boolean and numeric literal values are defined as follows:

~~~~~
Literal :: = Boolean_literal | Integer_literal | Real_literal

Integer_literal ::= decimal_integer_literal

Real_literal ::= decimal_real_literal

decimal_integer_literal ::= ('–')? numeral

decimal_real_literal ::= ('–')? numeral '.' numeral

numeral ::= digit*
~~~~~

Boolean\_literal are `true` and `false`.

Examples of Integer\_literals include `1`, `42`, and `-1337`.

Examples of Real\_literals include `3.1415`, `1.6180`, and `0.001`.

String elements are defined with the following syntax:

~~~~~
STRING ::= "(string_element)*"

string_element ::= "" | non_quotation_mark_graphic_character
~~~~~

