[Cascavel-pm] [OT] Bison, alguém?

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Janeiro 31 04:32:44 PST 2008


Flavio S. Glock wrote:
> Luis:
> 
> Isso pode ser resolvido dividindo o problema em duas etapas: construa
> uma "lista" de "item".
> Depois, defina "item" como sendo: "person" | "address" | ...
> 
> (baseado na minha experiencia com o Parse::Yapp, que pode funcionar
> diferente do bison)

OK, ok, eu quase cheguei lá, eu acho.

/** BEGIN GRAMMAR **/
%token IDENTIFIER
%token STRING

%%

/***** TERMINALS FOR person: *****/
/* "person:" single-valued, mandatory. */
person: "person:" STRING
    ;

/* "address:" multi-valued, mandatory */
address: "address:" STRING
    ;
address_lst: address
    | address address_lst
    ;

/* "phone:" multi-valued, mandatory */
phone: "phone:" DIGITS
    ;

phone_lst: phone
    | phone phone_lst
    ;

/* "fax-no:" multi-valued, optional */
fax_no: "fax-no:" DIGITS
    ;
fax_no_lst: /* EMPTY */
    | fax_no fax_no_lst
    | fax_no
    ;

/* "nic-hdl:" single-valued, indexed, mandatory */
nic_hdl: "nic-hdl:" IDENTIFIER
    ;

/* "e-mail:" multi-valued, mandatory */
email: "e-mail:" STRING
    ;
email_lst: email
    | email email_lst
    ;
/****** END TERMINALS FOR person: *****/

/* All RPSL code is a list of RPSL objects */
object_list: /* EMPTY */
    | object object_list
    | object
    ;

/* All objects in RPSL (for now) are "person" objects */
object: person_obj
    ;

/* Person objects are a list of person attributes */
person_object: person person_attr_lst
    ;

person_attr_lst: person_attr
    | person_attr person_attr_lst
    ;

/* A person_attr_list is a list of person-related attributes */
person_attr: address_lst
    | phone_lst
    | fax_no_lst
    | nic_hdl
    | email_lst
    ;
/** END GRAMMAR **/

Bom, como você reparou,

person: xxxxx
address: yyyy

é um person object válido, e não é bem isso que eu quero.

Você tem alguma idéia de como enforçar a presença de atributos mandatórios?

Obrigado pelas dicas!
Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}



Mais detalhes sobre a lista de discussão Cascavel-pm