使用语法导向的转换方案将整数转换为罗马数字?

Dan*_*ola 8 compiler-construction translation-scheme roman-numerals

龙书包括使用语法指导的翻译方案将整数转换为罗马数字的练习.

怎么能完成?

Odd*_*ing 2

我会考虑从右到左解析。

首先,我将映射单位列:

0 -> ''
1 -> 'I'
2 -> 'II'
3 -> 'III'
4 -> 'IV'
...
9 -> 'IX'
Run Code Online (Sandbox Code Playgroud)

然后,如果有第二列(例如,右数第二列 = 十列),我将使用它来映射到

0 -> ''
1 -> 'X'
2 -> 'XX'
...
9 -> 'XC'
Run Code Online (Sandbox Code Playgroud)

这需要添加到初始输出之前。

对下一列(数百、数千)重复此操作,直到用完字母。

仔细检查该数字不是“0”或负数。