2.3. BNF du langage AROM
kb ::=
KNOWLEDGE_BASE IDF
documentations
kb_components;
documentations ::=
// vide | documentations documentation ;
documentation ::=
DOCUMENTATION (STRING_LITERAL | LONG_LITERAL | URL_LITERAL);
kb_components ::=
// vide | kb_components kb_component ;
kb_component ::=
class | association | instance | tuple ;
class ::=
CLASS IDF
super_class_descriptor
documentations
class_variables_and_composition ;
super_class_descriptor ::=
// vide | SUPER_CLASS IDF ;
class_variables_and_composition ::=
// vide
| VARIABLES
variables ;
variables ::=
// vide | variables variable ;
variable ::=
VARIABLE IDF
variable_descriptors ;
variable_descriptors ::=
// vide | variable_descriptors variable_descriptor ;
variable_descriptor ::=
TYPE type
| DOMAIN domain
| CARDINALITY variable_cardinality
| DEFAULT value
| documentations
| UNIT STRING_LITERAL
| ATTACHMENT (BOOLEAN_LITERAL | attachment)
| DEFINITION equations ;
attachment ::=
IDF classnames COLON IDF ;
classnames ::=
// vide | classnames classname ;
classname ::=
DOT IDF;
variable_cardinality ::=
min_bound max_bound ;
min_bound ::=
// vide | MIN INTEGER_LITERAL ;
max_bound ::=
// vide | MAX INTEGER_LITERAL | MAX MULT ;
type ::=
base_type | SET_OF base_type | LIST_OF base_type ;
base_type ::=
INTEGER | FLOAT | BOOLEAN | STRING | IDF ;
domain ::=
domain_set | domain_interval ;
domain_interval ::=
LBRACK (value | MULT) DOTDOT (value | MULT) RBRACK ;
domain_set ::=
LCURL values RCURL ;
values ::=
value | values COMMA value ;
value ::=
literal
| LCURL RCURL
| LCURL literals RCURL
| LBRACK RBRACK
| LBRACK literals RBRACK ;
literals ::=
literal
| literals COMMA literal;
literal ::=
INTEGER_LITERAL
| MINUS INTEGER_LITERAL
| FLOAT_LITERAL
| MINUS FLOAT_LITERAL
| STRING_LITERAL
| BOOLEAN_LITERAL
| IDF ;
association ::=
ASSOCIATION IDF
super_association_descriptor
documentations
association_roles
association_variables ;
super_association_descriptor ::=
// vide | SUPER_ASSOCIATION IDF ;
association_variables ::=
// vide
| VARIABLES
variables ;
association_roles ::=
// vide
| ROLES
roles ;
roles ::=
// vide
| roles
ROLE IDF
role_descriptors ;
role_descriptors ::=
// vide
| role_descriptors role_descriptor ;
role_descriptor ::=
TYPE IDF
| DOMAIN domain_role
| MULTIPLICITY role_multiplicity
| documentations ;
role_multiplicity ::=
min_bound max_bound ;
domain_role ::=
LCURL instance_values RCURL ;
instance_values ::=
instance_value | instance_values COMMA instance_value ;
instance_value ::= IDF ;
instance ::=
INSTANCE IDF
ISA IDF
instance_descriptors;
instance_descriptors ::=
// vide | instance_descriptors instance_descriptor ;
instance_descriptor ::=
IDF EQUAL value | documentations;
tuple ::=
TUPLE
ISA IDF
tuple_descriptors ;
tuple_descriptors ::=
// vide | tuple_descriptors tuple_descriptor ;
tuple_descriptor ::=
IDF EQUAL value | documentations ;
equations ::=
// vide | equations equation ;
equation ::=
portee COLON expression_equation | expression_equation ;
portee ::=
portee_variable | portee COMMA portee_variable ;
portee_variable ::=
IDF IN expr_cond ;
expression_equation ::=
expr_gauche EQUAL expr_droite ;
expr_gauche ::=
IDF DOT IDF | IDF ;
expr_droite ::=
expr_cond
| IF expr_cond
THEN
expr_droite
ELSE
expr_droite ;
expr_quantifiee ::=
ALL IDF IN expr_cond COLON expr_cond
| EXISTS IDF IN expr_cond COLON expr_cond
| ALL IDF IN expr_cond COMMA expr_quantifiee
| EXISTS IDF IN expr_cond COMMA expr_quantifiee ;
expr_cond ::=
expr_quantifiee
| expr_cond AND expr_cond
| expr_cond OR expr_cond
| NOT expr_cond
| expr_cond EQUAL expr_cond
| expr_cond INEQUAL expr_cond
| expr_cond GT expr_cond
| expr_cond GTE expr_cond
| expr_cond LT expr_cond
| expr_cond LTE expr_cond
| expr_cond MEMBER expr_cond
| expr_cond PLUS expr_cond
| expr_cond MINUS expr_cond
| expr_cond MULT expr_cond
| expr_cond DIVISION expr_cond
| expr_cond DIV expr_cond
| expr_cond MOD expr_cond
| expr_cond POWER expr_cond
| LOG10 LPAREN expr_cond RPAREN
| LN LPAREN expr_cond RPAREN
| EXP LPAREN expr_cond RPAREN
| SQRT LPAREN expr_cond RPAREN
| SIN LPAREN expr_cond RPAREN
| COS LPAREN expr_cond RPAREN
| TAN LPAREN expr_cond RPAREN
| ABS LPAREN expr_cond RPAREN
| ROUND LPAREN expr_cond RPAREN
| FLOOR LPAREN expr_cond RPAREN
| CEIL LPAREN expr_cond RPAREN
| MIN2 LPAREN expr_cond COMMA expr_cond RPAREN
| MAX2 LPAREN expr_cond COMMA expr_cond RPAREN
| SIZE LPAREN expr_cond RPAREN
| LEFT LPAREN expr_cond COMMA expr_cond RPAREN
| RIGHT LPAREN expr_cond COMMA expr_cond RPAREN
| INDEX_OF LPAREN expr_cond COMMA expr_cond RPAREN
| LENGTH LPAREN expr_cond RPAREN
| SUBSTRING LPAREN expr_cond
COMMA expr_cond COMMA expr_cond RPAREN
| NTH LPAREN expr_cond COMMA expr_cond RPAREN
| RANDOM LPAREN expr_cond COMMA expr_cond RPAREN
| CONCATENATE LPAREN portee COLON expr_droite
COMMA expr_cond RPAREN
| MIN_ELEMENT LPAREN portee COLON expr_droite RPAREN
| MAX_ELEMENT LPAREN portee COLON expr_droite RPAREN
| MIN_VALUE LPAREN portee COLON expr_droite RPAREN
| MAX_VALUE LPAREN portee COLON expr_droite RPAREN
| SUM LPAREN portee COLON expr_droite RPAREN
| PRODUCT LPAREN portee COLON expr_droite RPAREN
| AVERAGE LPAREN portee COLON expr_droite RPAREN
| STD_DEV LPAREN portee COLON expr_droite RPAREN
| VARIANCE LPAREN portee COLON expr_droite RPAREN
| MINUS expr_cond %prec UMINUS
| LPAREN expr_cond RPAREN
| expr_cond DOT IDF
| expr_cond AT IDF BANG IDF
| expr_cond BANG IDF
| BOOLEAN_LITERAL
| IDF
| INTEGER_LITERAL
| FLOAT_LITERAL
| STRING_LITERAL
| SET LPAREN portee COLON expr_droite RPAREN
| KNOWN_SET LPAREN portee COLON expr_droite RPAREN
| SELECT LPAREN portee COLON expr_droite RPAREN
| UNION LPAREN portee COLON expr_droite RPAREN
| INTER LPAREN portee COLON expr_droite RPAREN
| LBRACK RBRACK
| LBRACK liste_expr_cond RBRACK
| LCURL RCURL
| LCURL liste_intervalle RCURL
| IS_DEFINED LPAREN expr_droite RPAREN
| IS_VOID LPAREN expr_droite RPAREN
| IS_KNOWN LPAREN expr_droite RPAREN
| __ERROR LPAREN expr_droite RPAREN ;
liste_intervalle ::=
intervalle | liste_intervalle COMMA intervalle ;
intervalle ::=
expr_cond DOTDOT expr_cond | expr_cond ;
liste_expr_cond ::=
expr_cond | liste_expr_cond COMMA expr_cond ;
Terminaux du langage AROM :
LineTerminator = \r|\n|\r\n
InputCharacter = [^\r\n]
WhiteSpace = {LineTerminator} | [ \t\f]
Comment = {TraditionalComment} | {EndOfLineComment}
TraditionalComment = "/*" [^*] {CommentContent} \*+ "/"
EndOfLineComment = "//" {InputCharacter}* {LineTerminator}
CommentContent = ( [^*] | \*+[^*/] )*
Identifier = [:jletter:][:jletterdigit:]*
DecIntegerLiteral = 0 | [1-9][0-9]*
DoubleLiteral = {FLit1}|{FLit3}|{FLit4}
FLit1 = [0-9]+ \. [0-9]+ {Exponent}?
FLit3 = [0-9]+ {Exponent}
FLit4 = [0-9]+ {Exponent}?
Exponent = [eE] [+\-]? [0-9]+
StringCharacter = [^\r\n\"\\]
KNOWLEDGE_BASE ::= "knowledge-base:" ;
DOCUMENTATION ::= "documentation:" ;
CLASS ::= "class:" ;
SUPER_CLASS ::= "super-class:" ;
ASSOCIATION ::= "association:" ;
SUPER_ASSOCIATION ::= "super-association:" ;
VARIABLES ::= "variables:" ;
VARIABLE ::= "variable:" ;
ROLES ::= "roles:" ;
ROLE ::= "role:" ;
INSTANCE ::= "instance:" ;
TUPLE ::= "tuple:" ;
ISA ::= "is-a:" ;
TYPE ::= "type:" ;
DOMAIN ::= "domain:" ;
DEFAULT ::= "default:" ;
DEFINITION ::= "definition:" ;
UNIT ::= "unit:" ;
ATTACHMENT ::= "attachment:" ;
SET_OF ::= "set-of" ;
LIST_OF ::= "list-of" ;
MIN ::= "min:" ;
MAX ::= "max:" ;
MULTIPLICITY ::= "multiplicity:" ;
CARDINALITY ::= "cardinality:" ;
INTEGER ::= "integer" ;
FLOAT ::= "float" ;
BOOLEAN ::= "boolean" ;
STRING ::= "string" ;
BOOLEAN_LITERAL ::= "true" | "false";
LBRACK ::= "[" ;
RBRACK ::= "]" ;
LCURL ::= "{" ;
RCURL ::= "}" ;
COMMA ::= "," ;
DOTDOT ::= ".." ;
EQUAL ::= "=" ;
COLON ::= ":" ;
LTE ::= "<=" ;
GTE ::= ">=" ;
INEQUAL ::= "<>" ;
LT ::= "<" ;
GT ::= ">" ;
PLUS ::= "+" ;
MINUS ::= "-" ;
MULT ::= "*" ;
DIVISION ::= "/" ;
POWER ::= "^" ;
LPAREN ::= "(" ;
RPAREN ::= ")" ;
DOT ::= "." ;
BANG ::= "!" ;
AT ::= "@" ;
IN ::= "in" ;
MEMBER ::= "member" ;
THEN ::= "then" ;
ELSE ::= "else" ;
IF ::= "if" ;
AND ::= "and" ;
OR ::= "or" ;
NOT ::= "not" ;
LOG10 ::= "log10" ;
LN ::= "ln" ;
EXP ::= "exp" ;
SIN ::= "sin" ;
COS ::= "cos" ;
TAN ::= "tan" ;
SQRT ::= "sqrt" ;
MIN_ELEMENT ::= "minElement" ;
MAX_ELEMENT ::= "maxElement" ;
MIN_VALUE ::= "minValue" ;
MAX_VALUE ::= "maxValue" ;
MIN2 ::= "min" ;
MAX2 ::= "max" ;
SUM ::= "sum";
PRODUCT ::= "product" ;
UNION ::= "union";
INTER ::= "inter";
SIZE ::= "size" ;
SELECT ::= "select";
KNOWN_SET ::= "knownSet";
SET ::= "set";
RANDOM ::= "random";
DIV ::= "div";
MOD ::= "mod";
ABS ::= "abs";
NTH ::= "nth";
LEFT ::= "left";
RIGHT ::= "right";
LENGTH ::= "length";
INDEX_OF ::= "indexOf";
SUBSTRING ::= "substring";
CONCATENATE ::= "concatenate";
ROUND ::= "round";
CEIL ::= "ceil";
FLOOR ::= "floor";
AVERAGE ::= "average";
STD_DEV ::= "stdDev";
VARIANCE ::= "variance";
ALL ::= "all";
EXISTS ::= "exists";
IS_VOID ::= "isVoid";
IS_KNOWN ::= "isKnown";
IS_DEFINED ::= "isDefined";