36 lines
931 B
Text
36 lines
931 B
Text
loop: [wsz = &a - &n]
|
|
parse(line)\loop
|
|
parse(error)\loop;
|
|
line: roman *;
|
|
roman: [n=0] [off=0]
|
|
comb((<^>),(<&>),(<M>))
|
|
comb((<M>),(<D>),(<C>))
|
|
comb((<C>),(<L>),(<X>))
|
|
comb((<X>),(<V>),(<I>))
|
|
[n>0?] decimal(n) = { 1 * };
|
|
comb: proc(c1,c2,c3)
|
|
[v1 = *(wsz*off++ + &a)]
|
|
[v2 = *(wsz*off++ + &a)]
|
|
[v3 = *(wsz*off + &a)]
|
|
( c3 ( c3 ( c3 [n=+(3*v3)]
|
|
| [n=+(2*v3)] )
|
|
| c1 [v1>0?] [n=+v1-v3]
|
|
| c2 [v2>0?] [n=+v2-v3]
|
|
| [n=+v3] )
|
|
| c2 [v2>0?] [n=+v2]
|
|
( c3 ( c3 ( c3 [n=+(3*v3)]
|
|
| [n=+(2*v3)] )
|
|
| [n=+v3] )
|
|
| () )
|
|
| () );
|
|
error: smark ignore(<<>>) string(notnewline) scopy *
|
|
= { <error: > 1 * };
|
|
|
|
notnewline: !<<
|
|
>>;
|
|
|
|
n: 0;
|
|
a: 0; 0; 1750; 764; 144; 62; 12; 5; 1;
|
|
off:0;
|
|
wsz:0;
|
|
v1: 0; v2: 0; v3: 0;
|