%{
#include<stdio.h>
#include<string.h>
int value(char ch)
{
switch(ch)
{
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
int romanToDecimal(char roman[])
{
int i, sum = 0;
int len = strlen(roman);
for(i = 0; i < len; i++)
{
if(i < len - 1 && value(roman[i]) < value(roman[i + 1]))
sum -= value(roman[i]);
else
sum += value(roman[i]);
}
return sum;
}
%}
%%
[IVXLCDM]+
{
printf("Roman Numeral : %s\n", yytext);
printf("Decimal Value : %d\n", romanToDecimal(yytext));
}
\n ;
. {
printf("Invalid Roman Numeral\n");
}
%%
int yywrap()
{
return 1;
}
int main()
{
printf("Enter Roman Numeral: ");
yylex();
return 0;
}
JXsKI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CgppbnQgdmFsdWUoY2hhciBjaCkKewogICAgc3dpdGNoKGNoKQogICAgewogICAgICAgIGNhc2UgJ0knOiByZXR1cm4gMTsKICAgICAgICBjYXNlICdWJzogcmV0dXJuIDU7CiAgICAgICAgY2FzZSAnWCc6IHJldHVybiAxMDsKICAgICAgICBjYXNlICdMJzogcmV0dXJuIDUwOwogICAgICAgIGNhc2UgJ0MnOiByZXR1cm4gMTAwOwogICAgICAgIGNhc2UgJ0QnOiByZXR1cm4gNTAwOwogICAgICAgIGNhc2UgJ00nOiByZXR1cm4gMTAwMDsKICAgICAgICBkZWZhdWx0OiByZXR1cm4gMDsKICAgIH0KfQoKaW50IHJvbWFuVG9EZWNpbWFsKGNoYXIgcm9tYW5bXSkKewogICAgaW50IGksIHN1bSA9IDA7CiAgICBpbnQgbGVuID0gc3RybGVuKHJvbWFuKTsKCiAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgIHsKICAgICAgICBpZihpIDwgbGVuIC0gMSAmJiB2YWx1ZShyb21hbltpXSkgPCB2YWx1ZShyb21hbltpICsgMV0pKQogICAgICAgICAgICBzdW0gLT0gdmFsdWUocm9tYW5baV0pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc3VtICs9IHZhbHVlKHJvbWFuW2ldKTsKICAgIH0KCiAgICByZXR1cm4gc3VtOwp9CiV9CgolJQoKW0lWWExDRE1dKwp7CiAgICBwcmludGYoIlJvbWFuIE51bWVyYWwgOiAlc1xuIiwgeXl0ZXh0KTsKICAgIHByaW50ZigiRGVjaW1hbCBWYWx1ZSA6ICVkXG4iLCByb21hblRvRGVjaW1hbCh5eXRleHQpKTsKfQoKXG4gICAgICA7CgouICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIFJvbWFuIE51bWVyYWxcbiIpOwogICAgICAgIH0KCiUlCgppbnQgeXl3cmFwKCkKewogICAgcmV0dXJuIDE7Cn0KCmludCBtYWluKCkKewogICAgcHJpbnRmKCJFbnRlciBSb21hbiBOdW1lcmFsOiAiKTsKICAgIHl5bGV4KCk7CiAgICByZXR1cm4gMDsKfQo=