你能否幫我找出我在下面的代碼中出錯的地方 - (或者指向我可以找到/學習的地方)。請幫我改進下面的語法
柔性輸入 -
%{
#include "jq.tab.h"
void yyerror(char *);
%}
method add|map|.. and other methods go here
%%
"/*" { return CS; }
"*/" { return CE; }
"jQuery" {
printf("%s is yytext\n", yytext);
return *yytext;
}
"args" { return ARGUMENT; }
{method} { return METHOD; }
[().\n] { return *yytext; }
[ \t]+ { return WS; }
. { return IGNORE; }
%%
int yywrap(void) {
return 1;
}
野牛輸入 -
%{
#include <stdio.h>
int yylex(void);
void yyerror(char *);
%}
%token ARGUMENT METHOD IGNORE WS CS CE
%error-verbose
%%
stmts:
stmt '\n' { printf("A single stmt\n"); }
| stmt '\n' stmts { printf("Multi stmts\n"); }
;
stmt:
jQuerycall { printf("A complete call ends here\n"); }
| ignorechars { printf("Ignoring\n"); }
| ignorechars WS jQuerycall { printf("ignore+js\n"); }
| jQuerycall WS ignorechars { printf("js+ignore\n"); }
| optionalws stmt optionalws
| CS stmt CE { printf("comment\n"); }
;
jQuerycall:
'jQuery' '(' ARGUMENT ')' '.' methodchain { printf("args n methodchain\n"); }
| 'jQuery' '(' ')' '.' methodchain { printf("methodchain\n"); }
| 'jQuery' '(' ARGUMENT ')' { printf("args\n"); }
| 'jQuery' '(' ')' { printf("empty call\n"); }
;
methodchain:
methodchain '.' methodcall
| methodcall
;
methodcall:
METHOD '(' ')'
;
ignorechars:
IGNORE
| IGNORE optionalws ignorechars
;
optionalws:
| WS
;
%%
void yyerror(char *s) {
fprintf(stderr, "%s\n", s);
}
int main(void) {
yyparse();
return 0;
}
目的是識別任何jQuery的電話與所有的元素。而忽略任何其他語句/串。也忽略評論..現在,這段代碼做了很多假設 - 比如'args'是jQuery中唯一的選擇器元素()
[編輯] 請看下面的輸入輸出情況。像10和12是我想弄明白的..
> 1.input: statement\n output: Ignoring
>
> 2.input: statement statement\n output: Ignoring
>
> 3.input: statement statement statement\n output: Ignoring
>
> 4.input: jQuery()\n output: jQuery is yytext empty call A complete call ends here
>
> 5.input: jQuery(args)\n output: jQuery is yytext args A complete call ends here
>
> 6.input: jQuery().add()\n output: jQuery is yytext methodchain A complete call ends here
>
> 7.input: jQuery(args).add().map()\n output: jQuery is yytext args n methodchain A complete call ends here
>
> 8.input: /*comment*/\n output: Ignoring comment
>
> 9.input: /*jQuery()*/\n output: jQuery is yytext empty call A complete call ends here comment
>
> 10.input: /* comment */\n output: syntax error, unexpected CE, expecting IGNORE
>
> 11.input: var a = b\n output: Ignoring
>
> 12.input: var a = jQuery(args)\n output: jQuery is yytext syntax error, unexpected 'jQuery', expecting IGNORE
非常感謝!
「 Adobe Flex「標籤並將其替換爲w/gnu-Flex。 – JeffryHouser 2012-08-01 14:43:23
好吧,我會記得下一次 – trinity 2012-08-01 16:15:02
如果你需要幫助,告訴我們你的問題的症狀是什麼,以及爲什麼你很難診斷根本原因。我們很少有人會費心去閱讀你的代碼,試圖猜測你的症狀是什麼。如果你懶惰,我們也是。 – 2012-08-01 16:34:56