aboutsummaryrefslogtreecommitdiffstats
path: root/syntax.y
diff options
context:
space:
mode:
Diffstat (limited to 'syntax.y')
-rw-r--r--syntax.y50
1 files changed, 50 insertions, 0 deletions
diff --git a/syntax.y b/syntax.y
new file mode 100644
index 0000000..aa0df71
--- /dev/null
+++ b/syntax.y
@@ -0,0 +1,50 @@
1%{
2#include "lex.yy.c"
3#include "cmd.h"
4
5%}
6
7%union {
8 char *str;
9}
10
11%token <str> WORD STRING
12%token NEWLINE CONTINUATION APPEND_OUT REDIRECT_OUT REDIRECT_IN APPEND_OUTPUT_ERR REDIRECT_OUTPUT_ERR PIPE AND OR BACKGROUND HEREDOC UNKNOWN
13
14%%
15
16line:
17 command NEWLINE { printf("Parsed a command.\n"); }
18 | NEWLINE { /* empty line */ }
19 ;
20
21command:
22 part {printf("PART\n"); }
23 | part separator command { printf("COMMAND\n"); }
24 | part REDIRECT_OUT WORD tail { printf("REDIRECT_OUT: %s\n", $3); free($3); }
25 | part REDIRECT_IN WORD tail { printf("REDIRECT_IN: %s\n", $3); free($3); }
26 | part HEREDOC WORD tail { printf("HEREDOC: %s\n", $3); free($3); }
27 | part BACKGROUND { printf("BACKGROUND\n"); }
28 ;
29
30tail:
31 part
32 | part REDIRECT_OUT WORD tail { printf("REDIRECT_OUT: %s\n", $3); free($3); }
33 | part REDIRECT_IN WORD tail { printf("REDIRECT_IN: %s\n", $3); free($3); }
34 | part HEREDOC WORD tail { printf("HEREDOC: %s\n", $3); free($3); }
35 ;
36
37part:
38 part WORD { printf("WORD: %s\n", $2); free($2); }
39 | part STRING { printf("STRING: %s\n", $2); free($2); }
40 | WORD { printf("WORD: %s\n", $1); free($1); }
41 | STRING { printf("STRING: %s\n", $1); free($1); }
42 ;
43
44separator:
45 PIPE { printf("PIPE\n"); }
46 | AND { printf("AND\n"); }
47 | OR { printf("OR\n"); }
48 ;
49
50%% \ No newline at end of file