この小さなyaccプログラムはどのように機能しますか?私がこれまで知っている何yaccはどのように機能しますか、セクションごとに説明できますか?
:
%{...%}
が定義 %% ... %%
では、ルールですが、ルールをどのように解釈しますか? %%
の後の とstuffは関数定義です。 とは%}
と%%
の間の部分ですか?私は理解していない何
%{
#include <stdlib.h>
int yylex(void);
void yyerror(char *);
%}
%token INTEGER
%left '+' '-'
%left '*' '/'
%%
program:
program expr '\n' { printf("%d\n", $2); }
|
;
expr:
INTEGER { $$ = $1; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1/$3; }
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
;
%%
void yyerror(char *s) {
printf("%s\n", s);
}
int main(void) {
yyparse();
return 0;
}
UPDATE
:
program:
program expr '\n' { printf("%d\n", $2); }
|
;
これはかなり良い答えのようですが、フォーマットがうまくいけば明確になります。あなたが書いたものを変更することなく、私が今できるビットを整理しましたが、http://stackoverflow.com/editing-helpも見てみたいでしょう。 – Flexo