BNF rules of LAZY

startrule  =  "define"  < node_def  >  "end"  . 
node_def  =  "node" nodeident 
display_part 
select_part 
order_part 
from_part  . 
display_part  =  "display" field  <  "," field  >  . 
field  =  [ level  ]  [ header  ] 
                modified_sqlpart 
         [ footer  ]  . 
level  =  "level"  "0 .. 9"  . 
header  = string  . 
modified_sqlpart  = 
        (  (  "bold"  /  "italic"  ) 
                 "("  ( modified_sqlpart  / string )  ")"  ) 
         /  (  [  "immediate"  ]  "href" nodeident 
                        "condition" sqlpart_list
                        "("  ( modified_sqlpart  / string )  ")"  ) 
         / sqlpart  . 
sqlpart  = columnident 
         /  (  "sqlexpr"  "(" string  ")"  )  . 
fromlistsqlpart  = string  <  "," string  >  . 
string  =  "''"  <  "character"  >  "''"  . 
sqlpart_list  = sqlpart  <  "," sqlpart  >  . 
footer  =  "break"  /  "newpara"  . 
from_part  =  "from" fromlistsqlpart  . 
select_part  =  "selected"  "by" sqlpart_list  . 
order_part  =  "order"  "by" sqlpart_list  . 
columnident  = identifier  . 
nodeident  = identifier  . 
identifier  =  "a...z"  <  "a..z, 1..9, . _"  >  .