Metalimbaj pentru Sintaxa ALLO
::= ne spune ca elementul din stinga se construieste dupa cum urmeaza sau este prin definitie;
| ne indica faptul ca putem alege pentru constructia elementului din stinga simbolului ::= pe oricare element din lista prezentata si ale carei elemente sunt separate de acest simbol;
Spatiu dintre doua elemente de metalimbaj sau dintre un element de metalimbaj si un atom (cum este cazul dintre nume si caracterul de link _ din definitia de mai jos) inseamna operatia de concatenare dintre doua siruri ce apartin clasei(multimii) din care fac parte cele doua elemente. Un element de metalimbaj semnifica in fapt o clasa de asamblaje (siruri pe alfabet in cele din urma) ce se obtin prin aplicarea regulilor acelui element.
nume ::= litera | nume litera | nume cifra | nume _
litera ::= orice element al multimii litere din setul caractere
(partea dreapta este un text comentariu
ce nu se supune regulilor de
interpretare metalimbaj asertiune
valabila si pentru definitia <cifra> )
cifra ::= orice element cifra a setului de caractere
var_intreg ::= var_intreg_scalara | var_intreg_masiv
var_intreg_scalara ::= nume
var_intreg_masiv ::= masiv
var_indice ::= nume
var_real ::= var_real_scalara | var_real_masiv
var_real_scalara ::= nume
var_real_masiv ::= masiv
var_domeniu ::= nume
var_fisier ::= nume
var_model ::= var_model_scalara | var_model_masiv
var_model_scalara ::= nume
var_model_masiv ::= masiv
var_fobj ::= var_fobj_scalara | var_fobj_masiv
var_fobj_scalara ::= nume
var_fobj_masiv ::= masiv
var_restr ::= var_restr_scalara | var_restr_masiv
var_restr_scalara ::= nume
var_restr_masiv ::= masiv
secv_cifra ::= cifra | cifra secv_cifra
numar_intreg ::= semn secv_cifra
semn ::= - | + | lambda
numar_real ::= semn p_int . p_frac exponent
p_int ::= secv_cifra | lambda
p_frac ::= secv_cifra | lambda
exponent ::= lambda | E numar_intreg | e numar_intreg
const_domeniu ::= [ expr_aritm , expr_aritm ]
sir ::= " secv_car "
secv_car ::= car | car secv_car
car ::= caracter ASCII recunoscut de ALLO (text comentariu)
masiv ::= nume_masiv [ l_dim ]
nume_masiv ::= nume
l_dim ::= dim | dim , l_dim
dim ::= domeniu
domeniu ::= const_domeniu | var_domeniu
ref_element_masiv ::= nume_masiv [ l_expr_ind ]
l_expr_ind ::= expr_ind | expr_ind , l_expr_ind
expr_ind ::= expr_aritm
opr_aritm ::= opr_unar | opr_binar
opr_unar ::= -
opr_binar ::= - | + | * | /
opr_adit ::= + | -
opr_mult ::= * | /
opr_fun ::= ABS | AND | APX | ATR | DIP | IFP | IFS | LOR | LOG
| MAX | MIN | MOD | NOT | SEARCH | SIG | SQR | XOR
opr_rel ::= < | <= | = | >= | > | <>
opr_marg ::= <= | = | >= | IN
Program ::= MODEL nume_model
sect_var_aux
VARIABLES
sect_var_model
OBJECTIVES
sect_var_fobj
CONSTRAINTS
sect_var_restr
END
sect_var_aux ::= s_instr
s_instr ::= instr | instr s_instr
instr ::= instr_file | instr_domeniu |
instr_integer | instr_real
instr_file ::= FILE s_decl_file
s_decl_file ::= decl_file | decl_file ; s_decl_file
decl_file ::= var_fisier = spec_fisier_dos
spec_fisier_dos ::= sir
instr_domeniu ::= RANGE s_decl_domeniu
s_decl_domeniu ::= decl_domeniu | decl_domeniu ; s_decl_domeniu
decl_domeniu ::= var_domeniu = const_domeniu
instr_integer ::= INTEGER s_decl_integer
s_decl_integer ::= decl_integer | decl_integer ; s_decl_integer
decl_integer ::= var_integer part_init part_valid
part_init ::= lambda | READ var_fisier | = val_init
val_init ::= expr_aritm | { l_expr_aritm }
l_expr_aritm ::= expr_aritm | expr_aritm , l_expr_aritm
part_valid ::= lambda | IS proced_valid
proced_valid ::= expr_cond_valid | FOR [ l_expr_apart ] proced_valid | { s_proced_valid }
s_proced_valid ::= proced_valid | proced_valid ; s_proced_valid
l_expr_apart ::= expr_apart | expr_apart , l_expr_apart
expr_apart ::= var_indice IN domeniu
expr_cond_valid ::= expr_aritm opr_rel expr_aritm
instr_real ::= REAL s_decl_real
s_decl_real ::= decl_real | decl_real ; s_decl_real
decl_real ::= var_real part_init part_valid
sect_var_model ::= s_instr_var_model
s_instr_var_model ::= instr_var_model | instr_var_model ; s_instr_var_model
instr_var_model ::= var_model part_cond_marg
part_cond_marg ::= lambda | IS proced_marg
proced_marg ::= ref_var_model cond_var_model | FOR [ l_expr_apart ] proced_marg |
{ s_proced_marg }
ref_var_model ::= var_model_scalara | ref_element_masiv_var_model
cond_var_model ::= opr_marg expr_marg_var
expr_marg_var ::= expr_aritm | domeniu
s_proced_marg ::= proced_marg | proced_marg ; s_proced_marg
sect_var_fobj ::= s_instr_fobj instr_select_fobj
s_instr_fobj ::= instr_fobj | instr_fobj ; s_instr_fobj
instr_fobj ::= var_fobj IS proced_def_fobj
proced_def_fobj ::= ref_fobj := expr_simb | FOR [ l_expr_apart ] proced_def_fobj |
{ s_proced_def_fobj }
s_proced_def_fobj ::= proced_def_fobj | proced_def_fobj ; s_proced_def_fobj
ref_fobj ::= var_fobj_scalara | ref_element_masiv_fobj
instr_select_fobj ::= MINIMIZE ref_fobj | MAXIMIZE ref_fobj
sect_var_restr ::= s_instr_restr
s_instr_restr ::= instr_restr | instr_restr ; s_instr_restr
instr_restr ::= var_restr IS proced_defrestr
proced_defrestr ::= ref_var_restr := expr_simb opr_marg expr_marg_restr
| FOR [ l_expr_apart ] proced_defrestr | { s_proced_defrestr }
s_proced_defrestr ::= proced_defrestr | proced_defrestr ; s_proced_defrestr
ref_var_restr ::= var_restr_scalara | ref_element_masiv_restr
expr_marg_restr ::= expr_simb | domeniu
expr_aritm ::= termen rest_suma
termen ::= factor rest_produs
rest_suma ::= lambda | opr_adit rest_suma
rest_produs ::= opr_mult factor rest_produs | lambda
factor ::= numar | ref_var_aux | apel_fun | ( expr_aritm ) | SUM [ l_expr_apart ] ( expr_aritm )
ref_var_aux ::= ref_var_intreg | ref_var_real
ref_var_intreg ::= var_intreg_scalara | ref_element_masiv_intreg
ref_var_real ::= var_real_scalara | ref_element_masiv_real
expr_simb ::= termen_simb rest_suma_simb
termen_simb ::= factor_simb rest_produs_simb
rest_suma_simb ::= lambda | opr_adit rest_suma_simb
rest_produs_simb ::= lambda | opr_mult factor_simb rest_produs_simb
factor_simb ::= numar | ref_var_aux | ref_var_model | apel_fun | ( expr_simb ) |
SUM [ l_expr_apart ] ( expr_simb )
apel_fun ::= opr_fun ( l_param_act )
l_param_act ::= expr_aritm | expr_aritm , l_param_act