0

以下にリストされているlexプログラムがあります。これは、(字句解析)特定のトークンを認識し、キーボードから入力されたときにそれらを画面に出力します。以下のコードの構文分析にyaccを使用したいのですが、この部分が完全にはわかりません.....出力はどのようになりますか?以下の私のコードで十分ですか?私はyaccに関する多くの記事をオンラインで読んだことがあります....簡単な説明をする人が必要です。前もって感謝します...

/* Regular Definitions */
RelationalOp_1         "<"
RelationalOp_2      "<="
RelationalOp_3      "=<"    
RelationalOp_4      "=="
RelationalOp_5      "!="
RelationalOp_6      ">"
RelationalOp_7      ">="
RelationalOp_8      "=>"

%%

{RelationalOp_1}        {printf("(RelationalOp_1, %s)\n", yytext);}
{RelationalOp_2}        {printf("(RelationalOp_2, %s)\n", yytext);}
{RelationalOp_3}        {printf("(RelationalOp_3, %s)\n", yytext);}
{RelationalOp_4}        {printf("(RelationalOp_4, %s)\n", yytext);}
{RelationalOp_5}        {printf("(RelationalOp_5, %s)\n", yytext);}
{RelationalOp_6}        {printf("(RelationalOp_6, %s)\n", yytext);}
{RelationalOp_7}        {printf("(RelationalOp_7, %s)\n", yytext);}
{RelationalOp_8}        {printf("(RelationalOp_8, %s)\n", yytext);}

.                            printf("Invalid input: %s\n",yytext);

%%

main()
{
  yylex();
}

yywrap()
{
}
4

1 に答える 1

0

あなたの質問に対する簡単な答えはノーです。あなたが持っているものは、yaccで生成されたパーサーを操作するには不完全です。lexで生成されたスキャナーでは、単にコンソールに何かを書き込むのではなく、メモリ内のトークンをパーサーに提供する必要があります。

コンテキストを理解するために、Pete Jinksの講義ノートは包括的であり、lexおよびyaccで生成されたプログラムがどのように連携するかを示しています。また、yaccのGNUバージョンであるBisonのオンラインマニュアルも参照してください。

于 2012-11-15T14:41:41.950 に答える