Práctica: Un lenguaje para Componer Invitaciones

En el capítulo 6 (sección 6.4.2.2) del libro The LaTex Web Companion se define un lenguaje para componer textos para enviar invitaciones.

Para escribir una invitación en ese lenguaje escribiríamos algo así:

pl@nereida:~/Lpl0910/Practicas/161009/src$ cat -n invitation.xml
 1  <?xml version="1.0"?>
 2  <!DOCTYPE invitation SYSTEM "invitation.dtd">
 3  <invitation>
 4  <!-- ++++ The header part of the document ++++ -->
 5  <front>
 6  <to>Anna, Bernard, Didier, Johanna</to>
 7  <date>Next Friday Evening at 8 pm</date>
 8  <where>The Web Cafe</where>
 9  <why>My first XML baby</why>
10  </front>
11  <!-- +++++ The main part of the document +++++ -->
12  <body>
13  <par>
14  I would like to invite you all to celebrate
15  the birth of <emph>Invitation</emph>, my
16  first XML document child.
17  </par>
18  <par>
19  Please do your best to come and join me next Friday
20  evening. And, do not forget to bring your friends.
21  </par>
22  <par>
23  I <emph>really</emph> look forward to see you soon!
24  </par>
25  </body>
26  <!-- +++ The closing part of the document ++++ -->
27  <back>
28  <signature>Michel</signature>
29  </back>
30  </invitation>

La sintáxis del lenguaje queda reflejada en la siguiente Document Type Definition (DTD) que aparece en la sección 6.4.3 del libro de Goosens:

pl@nereida:~/Lpl0910/Practicas/161009/src$ cat -n invitation.dtd
 1  <!-- invitation DTD   -->
 2  <!-- May 26th 1998 mg -->
 3  <!ELEMENT invitation (front, body, back) >
 4  <!ELEMENT front      (to, date, where, why?) >
 5  <!ELEMENT date       (#PCDATA) >
 6  <!ELEMENT to         (#PCDATA) >
 7  <!ELEMENT where      (#PCDATA) >
 8  <!ELEMENT why        (#PCDATA) >
 9  <!ELEMENT body       (par+) >
10  <!ELEMENT par        (#PCDATA|emph)* >
11  <!ELEMENT emph       (#PCDATA) >
12  <!ELEMENT back       (signature) >
13  <!ELEMENT signature  (#PCDATA) >

El objetivo de esta práctica es escribir un programa Perl que usando las extensiones para expresiones regulares presentes en la versión 5.10 reconozca el lenguaje anterior.

Véase también:

Casiano Rodríguez León
2013-04-23