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";