📜  用于十进制到十六进制转换的Lex程序

📅  最后修改于: 2021-05-28 03:57:14             🧑  作者: Mango

问题:编写一个Lex程序以进行十进制到十六进制的转换。

解释:
Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。函数yylex()是运行Rule Section的主要flex函数。

先决条件: Flex(快速词法分析器生成器)

例子:

Input: 12 
Output: C

Input: 116
Output: 74

Input: 55
Output: 37

Input: 212
Output: D4 

执行:

/* Lex program for decimal to hexadecimal conversion */
  
%{
    /* Definition section */
    #include
    int num, r, digit=0, count, pcount=0, i;
    char a[20];
%}
  
DIGIT [0-9]
/* Rule Section */
%%
  
{DIGIT}+ { num=atoi(yytext);
  
        while(num!=0)
        {
  
            r=num%16;
            digit='0'+r;
            if(digit>'9')
            digit+=7;
            a[count++]=digit;
            num=num/16;
  
        }
  
        for(i=count-1;i>=pcount;--i)
                printf("%c", a[i]);
                pcount=count;
        }
  
.|\n    ECHO;
         
%%
  
// driver code
int main()
{
    yylex();
    return 0;
}      

输出:

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。