!7

sS input = [[
  RULE WasLAB (("was|warum")&&("ist|bedeutet|heißt|soll|meint|nenn(t|en|st)")&&("lab"))
))
]];

sS rules = [[

RULE <id> ( <exp> ) = rule

// bracketing combines top and bottom
( <exp> ) = expX

// primitive expressions are also at top level
<quoted> = expX

// now come the lower levels
<expX> = exp3

<exp3> = exp2
<exp2> & & <exp3> = exp2

<exp2> = exp1
<exp1> | | <exp2> = exp1

// lowest level
<exp1> = exp
]];

p {
  O parsed = parseBottomUp(input, rules);
  print(call(parsed, "prettierAnalysis"));
}