Content
- 1 Introduction
- 2 Notation
- 3 Tool Usage
- 4 Top Level Elements
- 5 Control Flow Elements
- 6 Data Flow Elements
- 7 Location Attributes
- 8 Loop Bound Attributes
- 9 Time and Execution Attributes
- 10 Control Flow Properties
- 11 Control Flow Constraints
- 12 Data Flow Properties
- 13 Data Flow Constraints
- 14 Future Developments
- 15 Appendix A: FFX Grammar
- 16 Appendix B: Example – output of oRange tool
2 Notation
The FFX format is based on XML and its grammar is described here in a form as close as possible to an actual XML file. The notation used throughout this document is a melt of EBNF notation with XML notation for the different items composing the format.
Each element is represented by an EBNF rules put into comments just before its XML description.
TAG ::= <tag> ... </tag>
An element may contain a sequence of other elements that may be:
other elements
uppercase identifiers that refers to other element rules or representing contextual elements.
Tags, rule identifiers and attributes may be suffixed with EBNF-like symbols:
? means the item is optional,
* means the item may be repated 0 or more times,
+ means the item may be repeated 1 or more times.
If they alternatives in the definition of a symbol, they are separated by | as in the example below:
TAG ::= | <tag1> ... </tag1> | <tag2> ... </tag2> | ...
Following identifier represents a sequence of characters:
ID: XML identifier (as defined in Extensible Markup Language (XML) 1.1 (Second Edition)),
INT: an integer in decimal (r.e.1 [+-]?[0-9]+) or in hexadecimal (prefixed by 0x, r.e. 0[xX][0-9a-fA-F]+) form,
FLOAT: a flot value in decimal form (r.e. [+-]?[0-9]*\.[0-9]*([eE][+-]?[0-9]+)?
TEXT: any sequence of any character
ADDRESS: an address (usually an alias for INT)
Some texts may be delimited between /. This defines text that matches the regular expression between slashes.
Items may be also separated by | to represent an alternative. An alternative inside an attribute may also be followed by a member between brackets [ and ] that designs the default value of the attribute.
As a picture is better than any explanation, takes a look at the example below:
NAME ::= <name> TEXT </name> PHONE ::= <phone> /[0-9]+/ </phone> PEOPLE ::= <people> NAME PHONE* </people>
In this example, an element people contains exactly one name element and any number of phone elements. The name contains any text (but no sub-element) while the phone contains a text formed of decimal digits.
1 r.e. stands for regular expression.