%palindrome
%eden
pal_str="";
%aop
<palindrome> = "" <pal_1> : do {if ($p1) writeln(":-)"); else writeln(":-(");} later;
<pal_1> = ([a-zA-z]?)
: do {$v = 1;} now
| <pal_2>;
<pal_2> = ([a-zA-z]) <pal_3>
: do {pal_str = "$t"; $v is $p1;} now
| <pal_err>;
<pal_3> = <pal_1> `pal_str`
: do {$v is $p1;} now
| <pal_err>;
<pal_err> = * : do {$v = 0;} now;
notation %palindrome = <palindrome> split on "\n";