入力ファイル、.lファイル、.yファイル、および出力は次のとおりです。
問題は、パーサーが方向を再帰的に識別できないことです。
それは最初に識別しています...
ポートとその動作を認識するために同じルールを使用しました
しかし、方向性の場合ではありません。
また、rule(coutステートメント)に関連付けられた.yファイルコードも表示されません。
入力ファイル 。
start a b c d //ports
a:O b:I c:B d:O //direction of ports
.lファイル
[\t]+ {}
[\n] {line_num++; cout"line_num:" line_num; }
start { cout< "beggining of file"; return START;}
[a-zA-Z0-9_\-]+:[IOB] {cout<<"\ndirection:" << strdup(yytext); return DR; }
[a-zA-Z0-9_\-]+ {cout<<"\nfound name:" strdup(yytext); return NAME;}
.yファイル文法
doc : START ports dir
ports : NAME ports { cout<<"\port in .y" $1;}
| NAME { cout<<"\nport in .y" $1;}
;
dir : DR dir { cout<<"\ndirection in .y" $1;}
| DR { cout<<"\ndirection in .y"<<$1; }
;
出力はです。
ファイルの先頭
found name:a
found name:b
found name:c
found name:d
line no-2
direction:a:O