こんにちは私はそれがどのように動作するかを知るために小さなバイソンに取り組んでいます。バイソンは文章を解析することになっています。 文は式で構成され、式は単語で構成されます。続きBison - 構文解析ツリーの印刷方法
は私のコードです:だから
%{
#include <stdio.h>
#include <string.h>
void yyerror(const char *str)
{
fprintf(stderr,"error: %s\n",str);
}
int yywrap()
{
return 1;
}
main()
{
yyparse();
}
%}
%token ASSIGN RANGE OR AND WHITESPACE QUOTE LPAREN RPAREN NOT GREATER LESS
%union
{
int number;
char *string;
}
%token <number> VALUE
%token <string> WORD
%type <string> term
%type <string> expression
%%
query: /* empty */
| query expression
{
printf("WOrd:%s",$2);
}
;
expression:
term
|expression term
|expression AND term
{
printf("AND");
}
;
term:
WORD
{
$$=$1;
}
;
、ユーザーが単語を入力したとき、それは言葉をプリントアウトすることになって。 ユーザーは入力できる必要があります: 単語、単語、単語、単語
$$を使用して単語を渡して「クエリ式」ルールから出力する方法はわかりません。 どうすればよいですか?事前に
%{
#include <stdio.h>
#include <string.h>
#include "y.tab.h"
%}
%%
[0-9]+ yylval.number=atoi(yytext);return VALUE;
[a-zA-Z][a-zA-Z]* yylval.string=strdup(yytext);return WORD;
":" return ASSIGN;
"and"|"&"|"&&" return AND;
".." return RANGE;
"-" return NOT;
"|" return OR;
"\"" return QUOTE;
">" return GREATER;
"<" return LESS;
\n /* ignore end of line */;
\t /* ignore end of line */;
%%
本当にありがとうございました:
は、これが私のフレックスです。 Sarah
あなたが言及した関数のコードを提供してくださいすることができます:printALlNodes、makeTermNode、makeORNode ...本当にありがとうございました – sap
はちょうど私があなたの説明と簡単な例を認めることを言いたかったことは、このようなものになります。ジェネリックフォーマル言語とパースアルゴリズムの複雑な例を見てみるといいですね。 – mouche