Poliqarp2 dla Składnicy - opis języka przez przykłady

Uwagi ogólne:

Zapytania o atrybuty

category = "zdanie" [type = nt:zdanie]
category != "zdanie" [type != nt:zdanie]
orth = /.*ąc/ [orth = ".*ąc"]
category = "zdanie" | "wypowiedzenie" | /p.*/ [type = "nt:(zda|wypowiedze)nie|p.*"] Operatory (quasi)-logiczne są dozwolone tylko wewnątrz znakowych wyrażeń regularnych
base = /.*ć/ & /b.*/ [base = ".*ć" && base = "b.*"] & nie jest operatorem wyrażeń regularnych, więc musi być zastąpione przez operator logiczny &&
category = ((!"zdanie") & (!"wypowiedzenie")) [type != nt:zdanie && type != nt:wypowiedzenie]
category = (!("zdanie" | "wypowiedzenie")) [type != "(zda|wypowiedze)nie"] Uwaga: type to akurat ma każdy węzeł, więc dam jeszcze inny przykład:
[pos != adj] Zwraca węzły, które mają pos różne od adj lub w ogóle go nie mają
(plan na przyszłość: ograniczyć się do dozwolonych klas węzłów, np. seg i synw, ale nie nt:zdanie)
[pos = ".*" && pos != adj] A tak można wymusić, żeby pos jednak istniało
category = "zdanie" & sel & !(aspekt = "nd") [type = nt:zdanie && sel && !(aspekt = nd)]
base = #podstawowa: /.*ć/ & orth = #podstawowa [$P:=base = ".*ć" && orth = $P] Prawie to, o co chodzi, ale się nie otypuje, bo base jest amblistą (patrz opis języka). Ale da się obejść:
[msd=[$P:=base = ".*ć"] && orth = $P] Jawne wykorzystanie amblist, bez lukrów składniowych
[base = $P:=".*ć"] Aktualnie zabronione (".*ć" jest wzorcem, a nie wartością)

Zapytania o wieloznaczność drzewa

To chyba nowość?
[type=nt:zdanie && children~[rule=ze3 && edges[1].target==[type=nt:fl]]] zdanie z (być może niewybraną) wiązanką dzieci, w której pierwsze jest fl;
operator ~ ma tu takie samo znaczenie, jak dla wieloznacznych interpretacji w starym Poliqarpie
[type=nt:zdanie && children~[rule=ze3 && edges.target={| [type=nt:fl] [type=nt:ff] [type=nt:fw] |}]] zdanie z (być może niewybraną) wiązanką dzieci, zawierającą dokładnie fl ff fw (i to w tej kolejności)
[type=nt:zdanie && children~[rule=ze3 && edges.target={| [type=nt:fl] []{,2} [type=nt:fw] |}]] wewnątrz nawiasów {| ... |} można używać wyrażeń regularnych
[zdanie, children~[rule=ze3, edges.target={| [fl] []{,2} [fw] |}]] planowany sposób uproszczenia tego zapytania (wymaga rozszerzeń w parserze)

Relacje

A > B A > B
A > B > C A > B && B > C Łańcuszki zamierzamy kiedyś dodać do parsera
A >* B A >+ B Aktualnie niestety można tym zabić wykonawcę, lepiej ograniczyć przez {,N}
A >* B A ten wariant oznacza, że A może być równe B
A >R B A >[type=R] B Pierwszy wariant składni też mamy w planach
A >d B A >{d} B gdzie d może być postaci N lub M,N - a w Poliqarpie również ,N lub M,
A . B A B precedencja wg porządku segmentowego; domyślnie tylko dla segmentów!
to jest wyrażenie regularne konwertujące się do booleana, a więc tu łańcuszkować można już teraz
(... A B ...)/rha wersja ogólna osiągalna poprzez flagę - domyślnie wyłączamy, żeby nie zabić wykonawcy pochopnym zapytaniem
[].sons = {| []* A B []* |} tak w NKJP można opisać precedencję wg porządku krawędziowego, ale w Składnicy to chyba nie bardzo ma sens?
[].children~[edges.target={| []* $A $B []* |}] rozsądny Składnicowy odpowiednik?
(uwaga, aktualnie jakiś bug powoduje, że to się długo parsuje)
A .d B A []{d} B znaczenie d analogiczne jak dla dominacji; może też być * lub +
A >@l B A >*[1] B && B.sons.empty skrajny lewy liść wg porządku krawędziowego - dla uczciwych drzew bez przeplotów semantyka zachowana;
choć zapewne trzeba będzie .sons.empty zastąpić nowym atrybutem .terminal, bo obecne kryterium w zasadzie wykrywa podsegmenty
A >@r B A >*[-1] B && B.sons.empty analogicznie z prawej strony
A >@c B A >*[head] B && B.sons.empty analogicznie dla ścieżki głównej
A $ B $P > A && $P > B działa, ale naiwnie - musimy zoptymalizować
A $.* B $P > A && $P > B && A []* B wersja ogólniejsza
$P > (A []* B)/rha wersja prostsza - równoważna dla uczciwych drzew
root(A) [type=s] > A
same_tree(A, B) ? muszę najpierw zrozumieć, o co tak naprawdę tu chodzi (o bycie w tym samym zdaniu, czy o coś jeszcze?)