aat

git mirror of https://ccx.te2000.cz/bzr/aat
git clone https://ccx.te2000.cz/git/aat
Log | Files | Refs | README

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:
Maattest | 2+-
Mquery.pl | 33++++++++++++++++++++++++++++-----
Mquerytest | 2+-
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