aat

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

commit f6c426fdb32cc3ede30dc98486811f8763503d14
parent 6d5104ab82a0569523454cfd9ae88da3ce3138ab
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Wed, 19 Aug 2015 22:11:44 +0200

implement getting values with fallback in query.pl
Diffstat:
Mquery.pl | 31+++++++++++++++++++++++++++++++
Mquery_example.awk | 7+++++++
2 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/query.pl b/query.pl @@ -14,13 +14,26 @@ query_name_next([H|T]) --> query_name_next(T). query_name_next([]) --> []. +query_default_text([H|T]) --> [H], {\+memberchk(H,`'<>`)}, query_default_text(T). +query_default_text([]) --> []. + query_content([name(Name)|T]) --> query_name(Name), query_content(T). query_content([query(Query)|T]) --> query_exp(Query), query_content(T). query_content([expr(Expr)|T]) --> `'`, query_awk(Expr), `'`, query_content(T). query_content([]) --> []. +%query_default([text(Text)|T]) --> query_default_text(Text), query_default(T). +query_default([expr(Expr)|T]) --> `'`, query_awk(Expr), `'`, query_default(T). +query_default([query(Query)|T]) --> query_exp(Query), query_default(T). +query_default([query(Query, Default)|T]) --> + query_exp(Query, Default), query_default(T). +query_default([]) --> []. + query_exp(Content) --> `<`, query_content(Content), `>`. +query_exp(Content, Default) --> + `<`, query_content(Content), `:`, query_default(Default), `>`. + awk_string(String) --> `"`, awk_string_content(String), `"`. awk_string_content([0'\\,H|T],R) --> @@ -61,6 +74,9 @@ awk_code([H|T],R,Prev,F) --> awk_code(R,R,L,L) --> []. % awk_code(L) --> awk_code(L,[],delim,_). +query_awk([query(Query, Default)|T],delim) --> + query_exp(Query, Default), + query_awk(T, expr). query_awk([query(Query)|T],delim) --> query_exp(Query), query_awk(T, expr). @@ -75,13 +91,28 @@ query_awk(L) --> query_awk(L,delim). awk_out([code(Code)|T]) --> Code, awk_out(T). awk_out([query(Query)|T]) --> `get(`, query_out(Query), `)`, awk_out(T). +awk_out([query(Query, Default)|T]) --> + `(find(`, query_out(Query), `)?found:`, default_out(Default), `)`, awk_out(T). awk_out([]) --> []. query_out([name(Name)|T]) --> `"`, Name, `"`, query_out(T). query_out([query(Query)|T]) --> `get(`, query_out(Query), `)`, query_out(T). +query_out([query(Query, Default)|T]) --> + `(find(`, query_out(Query), `)?found:`, default_out(Default), `)`, query_out(T). query_out([expr(Expr)|T]) --> `(`, awk_out(Expr), `)`, query_out(T). query_out([]) --> []. +default_out([]) --> `""`. +default_out([H|T]) --> default_out_aux([H|T]). +%default_out_aux([text(Text)|T]) --> Text, default_out_aux(T). +default_out_aux([query(Query)|T]) --> + `get(`, query_out(Query), `)`, default_out_aux(T). +default_out_aux([query(Query, Default)|T]) --> + `(find(`, query_out(Query), `)?found:`, default_out(Default), `)`, + default_out_aux(T). +default_out_aux([expr(Expr)|T]) --> `(`, awk_out(Expr), `)`, default_out_aux(T). +default_out_aux([]) --> []. + %%% main([InFile]) :- diff --git a/query_example.awk b/query_example.awk @@ -1,4 +1,11 @@ BEGIN { foo(<bar>) x[<y<z>>] = <a'b()'> + y = "" + y = (y) (<c:>) + y = (y) (<d:'0'>) + y = (y) (<e:<f>>) + y = (y) (<g:<h:<i>>>) + y = (y) (<g:<h:<i:'<j> - (<k:'0'>)'>>>) + y = (y) (<g:<h:<i:'(<j>) - (<k:'0'>)'>>>) }