10 #define xstrndup strndup
15 action pkgstart { ts = p; }
18 tmp_action.package = xstrndup(ts, p - ts);
19 tmp_action.linenum = curline;
20 tmp_action.filename = curfile;
21 actions->push_back(tmp_action);
25 tmp_action.action = inapt_action::INSTALL;
29 tmp_action.action = inapt_action::REMOVE;
33 fprintf(stderr, "%s: %d: Syntax Error\n", curfile, curline);
36 newline = '\n' %{ curline += 1; };
37 comment = '#' (any - newline)* newline;
38 whitespace = [\t\v\f\r ] | comment | newline;
39 package_name = ((lower | digit) (lower | digit | '+' | '-' | '.')+) >pkgstart;
40 package_list = ((whitespace+ package_name)+ %add_list whitespace*);
41 cmd_install = ('install' package_list ';') >install;
42 cmd_remove = ('remove' package_list ';') >remove;
43 main := (cmd_install | cmd_remove | whitespace)* $err(misc_error);
50 void scanner(vector<inapt_action> *actions)
52 static char buf[BUFSIZE];
56 char *ts = 0, *te = 0;
59 vector<char *> tmp_list;
60 inapt_action tmp_action;
61 const char *curfile = "stdin";
66 char *p = buf + have, *pe, *eof = 0;
67 int len, space = BUFSIZE - have;
70 fprintf(stderr, "OUT OF BUFFER SPACE\n");
74 len = fread(p, 1, space, stdin);
84 if (cs == inapt_error) {
85 fprintf(stderr, "PARSE ERROR\n");
93 memmove(buf, ts, have);
99 if (cs < inapt_first_final) {
100 fprintf(stderr, "UNEXPECTED EOF\n");