%{
#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;
}
