问题:编写一个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基础课程》。