我正在尝试编写将接受输入的 lex 代码,然后查找并打印它在大型字典文本文件中找到的该输入的第一个排列。这是我到目前为止所拥有的:
%{
#include <stdio.h>
%}
%option noyywrap
%%
INPUT GOES HERE { //Not sure what expression to put here
printf("Longest is: %s", yytext);
return;
}
.|\n { }
%%
int main(void)
{
yylex();
return 0;
}
我有一种感觉,我必须使用状态,但我不太熟悉这些状态是如何工作的。有人可以指出我正确的方向吗?
编辑:这是接受答案的代码,以防有人想要它:
%{
#include <stdio.h>
#include <string.h>
%}
%option noyywrap
%%
^[ablm]{4}$ {
char originalWord [5];
strcpy(originalWord, yytext);
char input[5] = {"ablm"};
char tmp;
int i, j;
for(i=0; i<4; i++)
{
for (j=i+1; j<4; j++)
{
if (yytext[i] > yytext[j])
{
tmp=yytext[i];
yytext[i]=yytext[j];
yytext[j]=tmp;
}
}
}
if(strcmp(input,yytext)==0){
printf("First permutation is: %s", originalWord);
return;
}
else
;
}
.|\n { }
%%
int main(void)
{
yylex();
return 0;
}