59 lines
1.5 KiB
Text
59 lines
1.5 KiB
Text
prog: ignore(spaces)
|
|
let: peek/done
|
|
[ch = ch>140 ? ch-40 : ch ]
|
|
( [ch<110?] ( [ch==101?] vow
|
|
| [ch==102?] r1
|
|
| [ch==103?] r2
|
|
| [ch==104?] r3
|
|
| [ch==105?] vow
|
|
| [ch==106?] r1
|
|
| [ch==107?] r2 )
|
|
| [ch<120?] ( [ch==110?] hw
|
|
| [ch==111?] vow
|
|
| [ch==112?] r2
|
|
| [ch==113?] r2
|
|
| [ch==114?] r4
|
|
| [ch==115?] r5
|
|
| [ch==116?] r5
|
|
| [ch==117?] vow )
|
|
| [ch<130?] ( [ch==120?] r1
|
|
| [ch==121?] r2
|
|
| [ch==122?] r6
|
|
| [ch==123?] r2
|
|
| [ch==124?] r3
|
|
| [ch==125?] vow
|
|
| [ch==126?] r1
|
|
| [ch==127?] hw )
|
|
| [ch<140?] ( [ch==130?] r2
|
|
| [ch==131?] vow
|
|
| [ch==132?] r2 ))
|
|
[n>0?]\let done;
|
|
|
|
vow: [ch=0] out;
|
|
r1: [ch=1] out;
|
|
r2: [ch=2] out;
|
|
r3: [ch=3] out;
|
|
r4: [ch=4] out;
|
|
r5: [ch=5] out;
|
|
r6: [ch=6] out;
|
|
hw: [ch=7] out;
|
|
out: [n==4?] [--n] parse(( scopy ))
|
|
| ( [(l1!=10) & ((ch==l1) | (ch==7) | (!ch)) ?]
|
|
| [(l1==7) & (ch==l2) ?]
|
|
| [--n] parse(num) );
|
|
num: octal(ch);
|
|
done: [l1=10] [ch=0]
|
|
loop: [n>0?] out loop | parse((={*}));
|
|
|
|
peek: adv ord/read;
|
|
ord: char(ch) fail;
|
|
read: smark any(!<<>>);
|
|
adv: [l2=l1] [l1=ch];
|
|
|
|
spaces: <<
|
|
>>;
|
|
|
|
n: 4;
|
|
ch: 0;
|
|
l1: 0;
|
|
l2: 0;
|