私はbisonで書かれたパーサにトークンを渡すflexで書かれた字句解析器を持っています。
次は私のレクサーのごく一部です:
ID [a-z][a-z0-9]*
%%
rule {
printf("A rule: %s\n", yytext);
return RULE;
}
{ID} {
printf("An identifier: %s\n", yytext);
return ID;
}
"(" return LEFT;
")" return RIGHT;
あまりにも空白などを解析するための他のビットがあります。
はその後、パーサの一部は次のようになります。
%{
#include <stdio.h>
#include <stdlib.h>
#define YYSTYPE char*
%}
%token ID RULE
%token LEFT RIGHT
%%
rule_decl :
RULE LEFT ID RIGHT { printf("Parsing a rule, its identifier is: %s\n", $2); }
;
%%
これは、すべての作業罰金だが、私はただのprintfを使用してIDトークンをプリントアウトしたい - それは:)すべてです。私はコンパイラを書いているわけではありません。flex/bisonは私のソフトウェアのための良いツールです。あなたはどのようにトークンを印刷するのですか?印刷するとちょうど(null)
になります。
ありがとうございます。
'$ 2'はそのルールの' LEFT'トークンでしょうか? '$ 3'はあなたが印刷したい' ID'トークンではないでしょうか? –
$$はルール、$ 1は左、$ 2はID、$ 3は右であると思いましたか?いいえ?私はおそらく間違っている:s。いずれにしても($$、$ 1、...)それらのいずれかを印刷すると、(null)になりますので、何か間違ったことをしています。 – ale
@alemaster:@Chris Lutzは正しいです。ルール内のトークンは1から番号が付けられます。 '$$'はポインタを割り当てることができる変数です。そのポインタはルールの "結果"として取られ、 'rule_decl'を含む他のルールに渡されます。 –