commit df3bef46f961e4051a6debf6b2f943ca50541536
parent 6b76361494e12db6109399b975348942e9b367bb
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Thu, 10 Sep 2015 13:06:23 +0200
make shebang work, fixes parsing errors, error formatting
Diffstat:
3 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/aattest b/aattest
@@ -19,7 +19,7 @@ test.out: test.data test.qawk
awk -f test.qawk DEBUG=\$(DEBUG) test.data >test.out
test.qawk: test.awk
- swipl -q -g main -s $bin:h/query.pl test.awk >test.qawk
+ $bin:h/query.pl test.awk >test.qawk
# test.qawk: test.awk
# awk -f $bin/query.awk <test.awk >test.qawk
diff --git a/query.pl b/query.pl
@@ -1,9 +1,12 @@
-#!/usr/bin/swipl -q -g main -s
+#!/usr/bin/env swipl
% vim: ft=prolog textwidth=80 tabstop=4 softtabstop=4 shiftwidth=4 expandtab
:- use_module(library(pure_input)).
%%% :- use_module(library(dcg/basics)).
+:- initialization main.
+:- multifile prolog:message//1.
+
query_name([H|T]) -->
[H], { code_type(H, csymf) },
query_name_next(T).
@@ -151,13 +154,33 @@ out_default_aux([]) --> [].
%%%
-main([InFile]) :- !,
- (phrase_from_file(query_awk(Awk), InFile) -> true ; throw(parsing_failed)),
- (phrase(out_awk(Awk), Out) -> true ; throw(formatting_failed(Awk))),
+parse_file(InFile) :-
+ ( phrase_from_file(query_awk(Awk), InFile)
+ -> true
+ ; throw(parsing_failed(InFile))
+ ),
+ ( phrase(out_awk(Awk), Out)
+ -> true
+ ; throw(formatting_failed(InFile,Awk))
+ ),
format('~s', [Out]).
-main([]) :- main(["/dev/stdin"]).
+main :- current_prolog_flag(argv, Argv), main(Argv).
+
+main(Args) :-
+ set_prolog_flag(verbose, false),
+ ( (Args=[] -> InFile='/dev/stdin' ; Args=[InFile])
+ -> catch(parse_file(InFile), E, (print_message(error, E), halt(1)))
+ ; write('usage: query.pl: [filename]\n'), halt(2)
+ ),
+ halt.
+
% current_input(In), set_stream(In, tty(false)),
% (phrase_from_stream(query_awk(Awk), In) -> true ; throw(parsing_failed)),
% (phrase(out_awk(Awk), Out) -> true ; throw(formatting_failed(Awk))),
% format('~s', [Out]).
+
+prolog:message(parsing_failed(File)) -->
+ ['Unable to parse AWK/query file: ~w'-[File]].
+prolog:message(formatting_failed(File,_)) -->
+ ['Failed generating AWK code from file: ~w'-[File]].
diff --git a/querytest b/querytest
@@ -6,4 +6,4 @@ mkdir -p $dst || exit $?
cat >$dst/test.qawk || exit $?
-exec swipl -q -g main -s $query $dst/test.qawk
+exec $query $dst/test.qawk