aboutsummaryrefslogtreecommitdiffstats
path: root/lex.l
diff options
context:
space:
mode:
Diffstat (limited to 'lex.l')
-rw-r--r--lex.l33
1 files changed, 33 insertions, 0 deletions
diff --git a/lex.l b/lex.l
new file mode 100644
index 0000000..036d58e
--- /dev/null
+++ b/lex.l
@@ -0,0 +1,33 @@
1%{
2#include "syntax.tab.h" // Bison 生成的头文件
3
4void yyerror(const char *s);
5%}
6
7%option noyywrap
8
9%%
10
11[\t ]+ { /* Ignore whitespace */ }
12"\n" { printf("new line\n");return NEWLINE; }
13"\\\n" { printf("> "); }
14">>" { return APPEND_OUT; }
15"<<" { return HEREDOC; }
16">" { return REDIRECT_OUT; }
17"<" { return REDIRECT_IN; }
18">>&" { return APPEND_OUTPUT_ERR; }
19">&" { return REDIRECT_OUTPUT_ERR; }
20"|" { return PIPE; }
21"&&" { return AND; }
22"||" { return OR; }
23"&" { return BACKGROUND; }
24\"(\\.|[^\"])*\" { yylval.str = strdup(yytext); return STRING; }
25[a-zA-Z0-9_\-\/.]+ { yylval.str = strdup(yytext); return WORD; }
26
27
28%%
29
30void yyerror(const char *s)
31{
32 fprintf(stderr, "error: %s\n", s);
33}