
I hope that you are used to bison grammars :)


Grammar
=======

Function calls:
rule 7    statement -> funcresult ';'
rule 8    statement -> STR '(' ')' ';'
rule 24   funcresult -> STR '(' funcpar ')'
rule 9    statement -> ':' funcpar ')' ';'      /* Call the last func again with */
                                                /* new parameters */
"statements" that can be executed in XbW
rule 5    statement -> NUMVAR ':' '=' numexp ';'
rule 6    statement -> STRVAR ':' '=' strexp ';'

rule 10   statement -> '?' funcresult ';'
rule 11   statement -> '?' numexp ';'
rule 12   statement -> '?' strexp ';'
rule 13   statement -> IF '(' numexp ')'
rule 14   statement -> '@' STR '(' funcpar ')' ';'
rule 15   statement -> '@' STR '(' ')' ';'
rule 16   statement -> nptrexp ':' '=' nptrexp ';'
rule 17   statement -> sptrexp ':' '=' strexp ';'
rule 18   statement -> iptrexp ':' '=' numexp ';'
rule 19   statement -> iptrexp '+' '=' numexp ';'
rule 20   statement -> iptrexp '-' '=' numexp ';'
rule 21   statement -> iptrexp '+' '=' numexp '[' numexp ']' ';'
rule 22   statement -> iptrexp '-' '=' numexp '[' numexp ']' ';'
rule 23   statement -> error ';'


rule 25   funcpar -> funcpar strexp  
rule 26   funcpar -> funcpar numexp
rule 27   funcpar -> funcpar nptrexp
rule 28   funcpar -> funcpar dptrexp
rule 29   funcpar -> strexp
rule 30   funcpar -> numexp
rule 31   funcpar -> nptrexp
rule 32   funcpar -> dptrexp

rule 33   nptrexp -> NPTR ':' strexp '.' strexp
rule 34   nptrexp -> NULLPTR
rule 35   sptrexp -> SPTR ':' strexp '.' strexp
rule 36   iptrexp -> IPTR ':' strexp '.' strexp
rule 37   dptrexp -> DPTR ':' strexp '.' strexp

rule 38   numexp -> NUM
rule 39   numexp -> '(' NUMVAR ')'
rule 40   numexp -> numexp '=' '=' numexp
rule 41   numexp -> numexp '!' '=' numexp
rule 42   numexp -> numexp '<' numexp
rule 43   numexp -> numexp '>' numexp
rule 44   numexp -> numexp '<' '=' numexp
rule 45   numexp -> numexp '>' '=' numexp
rule 46   numexp -> numexp '<' '>' numexp
rule 47   numexp -> numexp '+' numexp
rule 48   numexp -> numexp '-' numexp
rule 49   numexp -> numexp '/' numexp
rule 50   numexp -> numexp '*' numexp
rule 51   numexp -> '-' numexp
rule 52   numexp -> '(' numexp ')'
rule 53   numexp -> '[' numexp ']'
rule 54   numexp -> strexp '=' '=' strexp
rule 55   numexp -> strexp '>' strexp
rule 56   numexp -> strexp '<' strexp
rule 57   numexp -> strexp '>' '=' strexp
rule 58   numexp -> strexp '<' '=' strexp
rule 59   numexp -> strexp '!' '=' strexp
rule 60   numexp -> funcresult
rule 61   numexp -> iptrexp   

rule 62   strexp -> STR
rule 63   strexp -> sptrexp
rule 64   strexp -> STRVAR 
rule 65   strexp -> strexp ',' strexp
rule 66   strexp -> '(' strexp ')'   
rule 67   strexp -> '[' strexp ']'   
