## 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