Display syntax errors using an error action
[mspang/inapt.git] / awesome.rl
index 508fa00..8e9b5b1 100644 (file)
@@ -36,11 +36,18 @@ using namespace std;
       tmp_list.clear();
     }
 
+    action misc_error {
+        fprintf(stderr, "%s: %d: Syntax Error\n", "stdin", curline);
+    }
+
+    newline = '\n' @{ curline += 1; };
+    comment = '#' (any - newline)* newline;
+    whitespace = [\t\v\f\r ] | comment | newline;
     package_name = ((lower | digit) (lower | digit | '+' | '-' | '.')+) >pkgstart @pkgend;
-    package_list = ((space+ package_name)+ %add_list space*) >clear_list;
-    cmd_install = 'install' package_list ';' @install;
-    cmd_remove = 'remove' package_list ';' @remove;
-    main := (cmd_install | cmd_remove | space)*;
+    package_list = ((whitespace+ package_name)+ %add_list whitespace*) >clear_list;
+    cmd_install = ('install' package_list ';') @install;
+    cmd_remove = ('remove' package_list ';') @remove;
+    main := (cmd_install | cmd_remove | whitespace)* $err(misc_error);
 }%%
 
 %% write data;
@@ -52,6 +59,7 @@ void scanner(vector<char *> &add_list, vector<char *> &del_list)
     static char buf[BUFSIZE];
     int cs, have = 0;
     int done = 0;
+    int curline = 1;
     char *ts = 0, *te = 0;
 
     vector<char *> tmp_list;