La sintáxis 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> | <función-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 carácter no contenido en <secuencia-esc>
<grupo-repetible> :== (<fmto-isis>)
<selector-campo> :== <fmto-campo> | <prefijo><fmto-campo> | <prefijo><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>
<id-campo> :== <entero> | <entero>^<carácter>
<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-carácter>"
<r-lit> :== |<cadena-carácter>|
<declaración-if> :== IF <expr-booleana> THEN <fmto-isis> FI | IF <expr-booleana> THEN <fmto-isis> ELSE <fmto-isis> FI
<expr-booleana> :== <término-booleano> | <término-booleano> OR <expr-booleana>
<término-booleano> :== <factor-booleano> | <factor-booleano> AND <término-booleano>
<factor-booleano> :== <relación> | NOT <relación> | (<expr-booleana>)
<relación> :== <expr-cadena><oprel-cadena><expr-cadena> | <expr-num><oprel><expr-num> | <función-booleana>
<expr-cadena> :== <factor-cadena> | <factor-cadena> | <expr-cadena>
<factor-cadena> :== <U-lit> | <campo> | <función-cadena> | (<expr-cadena>)<oprel-cadena> :== <oprel> | :
<oprel> :== = | <> | < | <= | > | >=
<expr-num> :== <término> | <término>+<término> | <término>-<término>
<término> :== <factor> | <factor>*<factor> | <factor>/<factor>
<factor> :== <constante> | <función-num> | (<expr-num>)
<función-num> :== RSUM(<fmto-isis>) | RMAX(<fmto-isis>) | RMIN(<fmto-isis>) | RAVR(<fmto-isis>) | VAL(<fmto-isis>) | L(<fmto-isis>)
<función-cadena> :== REF(<expr-num>,<fmto-isis>) | S(<fmto-isis>) | F(<expr-num>,<expr-num>,<expr-num>)
<función-booleana> :== A(<campo>) | P(<campo>)