15 lines
516 B
Text
15 lines
516 B
Text
def digits: [(M:1000"1"), (CM:900"1"), (D:500"1"), (CD:400"1"), (C:100"1"), (XC:90"1"), (L:50"1"), (XL:40"1"), (X:10"1"), (IX:9"1"), (V:5"1"), (IV:4"1"), (I:1"1")];
|
|
composer decodeRoman
|
|
@: 1;
|
|
[ <digit>* ] -> \(@: 0"1"; $... -> @: $@ + $; $@ !\)
|
|
rule digit: <value>* (@: $@ + 1;)
|
|
rule value: <='$digits($@)::key;'> -> $digits($@)::value
|
|
end decodeRoman
|
|
|
|
'MCMXC' -> decodeRoman -> !OUT::write
|
|
'
|
|
' -> !OUT::write
|
|
'MMVIII' -> decodeRoman -> !OUT::write
|
|
'
|
|
' -> !OUT::write
|
|
'MDCLXVI' -> decodeRoman -> !OUT::write
|