6








             APENDICE E. DESCRIPCION FORMAL DEL LENGUAJE DE FORMATEO                      _______________________________________________________________


          Descripci¢n formal del Lenguaje de formateo de CDS/ISIS

          La sintaxis del lenguaje de formateo se describe a continuaci¢n
          con la notaci¢n Backus-Naur.

          <fmto-isis> :== <elem-fmto> | <elem-fmto><separador><fmto-isis>

          <separador> :== , | espacio | <cadena-espaciadora> | ,<separador>
          | espacio<separador>

          <cadena-espaciadora> :== <par metro-espaciado> | <par metro-
          espaciado><cadena-espaciadora>

          <par metro-espaciado> :== / | # | % | C<entero> | X<entero>
          <elem-fmto> :== <selector-campo> | <campo-dummy> | <u-lit> |
          <declaraci¢n-if> | <cadena-espaciadora> | <mfn> |
          <par metro-modo> | <cadena-esc> | <funcion-cadena> | <grupo-
          repetible>

          <u-lit> :== '<cadena-caract>' | `<cadena-caract>`

          <mfn :== MFN | MFN(<entero>)

          <par metro-modo> :== MPL | MPU | MHL | MHU | MDL | MDU

          <cadena-esc> :== !<esc-d><secuencia-esc><esc-d>

          <esc-d> :== cualquier caracter no contenido en <secuencia-esc>

          <grupo-repetible> :== (<fmto-isis>)

          <selector-campo> :== <fmto-campo> | <prefijo><fmto-campo> | <pre-
          fijo><fmto-campo><sufijo>

          <campo-dummy> :== <id-dummy> | <cadena-c><id-dummy>

          <id-dummy> :== D<id-campo> | N<id-campo>

          <fmto-campo> :== <campo> | <campo>(<sangr¡a>)

          <sangr¡a> :== <entero> | <entero>,<entero>

          <campo> :== V<id-campo>



                                         269








          <id-campo> :== <entero> | <entero>^<caracter>

          <prefijo> :== <cadena-c> | <cadena-c><r-prelit> | <r-prelit>

          <cadena-c> :== <c-lit> | <c-lit><grupo-c> | <c-lit><cadena-c>

          <grupo-c> :== <c-fmto> | <c-fmto><grupo-c>

          <c-fmto> :== <par metro-espaciado> | <cadena-esc> | <par metro-
          modo>

          <r-prelit> :== <r-lit> | <r-lit>+

          <sufijo> :== <r-postlit> | <c-lit> | <r-postlit><c-lit>

          <r-postlit> :== <r-lit> | +<r-lit>

          <c-lit> :== "<cadena-caracter>"

          <r-lit> :== |<cadena-caracter>|

          <declaraci¢n-if> :== IF <expr-booleana> THEN <fmto-isis> FI | IF
          <expr-booleana> THEN <fmto-isis> ELSE <fmto-isis> FI

          <expr-booleana> :== <termino-booleano> | <termino-booleano> OR
          <expr-booleana>

          <termino-booleano> :== <factor-booleano> | <factor-booleano> AND
          <termino-booleano>

          <factor-booleano> :== <relaci¢n> | NOT <relaci¢n> | (<expr-
          booleana>)

          <relaci¢n> :== <expr-cadena><oprel-cadena><expr-cadena> | <expr-
          num><oprel><expr-num> | <funcion-booleana>

          <expr-cadena> :== <factor-cadena> | <factor-cadena> | <expr-
          cadena>

          <factor-cadena> :== <U-lit> | <campo> | <funcion-cadena> |
          (<expr-cadena>)<oprel-cadena> :== <oprel> | :

          <oprel> :== = | <> | < | <= | > | >=

          <expr-num> :== <termino> | <termino>+<termino> |
          <termino>-<termino>

          <termino> :== <factor> | <factor>*<factor> | <factor>/<factor>

          <factor> :== <constante> | <funcion-num> | (<expr-num>)

          <funcion-num> :== RSUM(<fmto-isis>) | RMAX(<fmto-isis>) |
          RMIN(<fmto-isis>) | RAVR(<fmto-isis>) | VAL(<fmto-isis>) |
          L(<fmto-isis>)




                                         270








          <funcion-cadena> :== REF(<expr-num>,<fmto-isis>) | S(<fmto-isis>)
          | F(<expr-num>,<expr-num>,<expr-num>)

          <funcion-booleana> :== A(<campo>) | P(<campo>)
          úTHENú<fmto-isis>úFIú|úIFú<expr-booleana>





















































                                         271




: