[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