NAME

aegis - meta-data file format

DESCRIPTION

The files used by the aegis program all have the same format. Some of
the files used by aegis are created and maintained by humans, and some
are created an maintained by aegis itself. The various manual entries
say which is which.

LEXICALCONSIDERATIONS

Names are any C identifier. Comments are C-style comments (or C++ or
shell). Numbers are decimal, octal or hexadecimal, as for C
constants. Whitespace (spaces, tabs and newlines) are ignored except
in strings or as they serve to separate tokens.
Strings are C-style strings, and similar to C, sequential string
constants are silently catenated together.
In addition, there is a style of @string@ which use at-signs (@) for
quoting. Unlike the C style of string, newlines are allowed within
these strings. To get an at-sign in such a string, double the at-
sign. There is no other escape mechanism available.

GRAMMAR

The format of all aegis files is described by a yacc(1) grammar.
%%
file
: field_list
;
A file contains a field list.
field_list
: /* empty */
| field_list field
;
A field list is zero or more fields.
field
: NAME '=' value ';'
;
A field is set by giving a name and a value.
value
: NAME
| INTEGER
| STRING
| structure
| list
;
A value may be a member of an enumeration (NAME), or an integer
constant, or a literal string. More complex values may be constructed
from these simple values.
structure
: '{' field_list '}'
;
A structure is a grouped list of fields.
list
: '[' list_body ']'
;
list_body
: /* empty */
| value_list
| value_list ','
;
value_list
: value
| value_list ',' value
A list is a sequential list of values separated by commas. It may be
empty, or it may have a trailing comma.

SEMANTICS

The types of the values must match those in the definition of the
file. See the relevant man pages for more information.
Files which are rewritten by aegis will lose any comments placed in
them. When time fields are emitted by aegis they are usually followed
by a human readable date in a comment.