View Code
%token STRING%token RIGHT_APPEND%%cmd: fg_cmd | bg_cmd ;bg_cmd: fg_cmd '&' ;fg_cmd: simple_cmd | pipe_cmd ;simple_cmd: /* empty command */ | executable | executable input_redirection | input_redirection executable | executable output_redirection | output_redirection executable | executable input_redirection output_redirection | input_redirection executable output_redirection | input_redirection output_redirection executable | executable output_redirection input_redirection | output_redirection executable input_redirection | output_redirection input_redirection executable ;executable: STRING | STRING executable;input_redirection: '<' STRING;output_redirection: overwrite_output_redirection | append_output_redirection ;overwrite_output_redirection: '>' STRING ;append_output_redirection: RIGHT_APPEND STRING ;pipe_cmd: left_cmd '|' right_cmd | left_cmd '|' middle_cmd right_cmd ;left_cmd: executable | executable input_redirection | input_redirection executable ;middle_cmd: executable '|' | middle_cmd executable '|' ;right_cmd: executable | executable output_redirection | output_redirection executable ;%%int main(int argc, char *argv[]){ yyparse(); return 0;}int yywrap(){ return 1;}int yyerror(char *msg){ printf("Error encountered: %s\n", msg);}