ANEXE
 

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.


Sintaxa ALLO

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