题目:
输入一符号串,判断是否为回文(Palindrome 顺读和倒读都一样)。
pal.lex
%{
/*
* 输入一符号串,判断是否为回文(顺读和倒读都一样)。
*/
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int yyerror(char*);
%}
%%
[a-zA-Z]+ {
yylval = yytext;
return LETTERS;
}
\n {return *yytext;}
. yyerror("无效的输入字符");
%%
int yywrap(void)
{
return 1;
}
pal.y
<pre name="code" class="plain">%token LETTERS
%{
int yylex(void);
int yyerror(char*);
%}
%%
program:
program statement '\n'
|
;
statement:
letter
;
letter: LETTERS {
char *s=$1;
int l,i;
int len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i]==s[len-1-i])
l=1;
else
l=0;
}
if(l)
printf("字符串是回文!\n");
else
printf("字符串不是回文!\n");
}
;
%%
int yyerror(char* s)
{
fprintf(stderr, "%s\n", s);
}
#include "lex.yy.c"
int main(void)
{
printf("huiwenpanduan.\n");
yyparse();
return 0;
}
运行结果: