Popis formátu souborů typu .fs
Soubory typu .fs slouží pro zachycení syntaktických struktur vět
přirozeného jazyka. Každý takový soubor obsahuje posloupnost stromů,
jejichž vrcholy odpovídají jednotlivým slovům věty. Každý vrchol
(slovo) je popsán řadou atributů.
Tento popis vznikl na základě céčkového zdrojáku funkcí, kterými se
stromy načítají do editoru Graph; autorem zdrojáku je Michal Křen. Autorem
popisu je Dan Zeman.
Poznámky k metasyntaxi
Neterminální symboly jsou uzavřeny v ostrých závorkách, terminální
symboly nebo jejich řetězce jsou uzavřeny v uvozovkách. Uvnitř
uvozovek se používá podobná notace jako v céčku, např. "\t" znamená
znak s kódem 9, tj. tabelátor. Znak "\n" reprezentuje konec řádku bez
ohledu na platformu, tj. reprezentuje nejen skutečné (v céčkovém
smyslu) "\n", ale též "\r\n" (dosový konec řádku), nebo dokonce
"\r". Editor Graph umí navíc ještě přečíst posloupnost "\n\r".
Zvláštní význam má konec řádku, uvedený zpětným lomítkem
("\\\n"). Může se zřejmě vyskytnout kdekoliv, v popisu
syntaxe proto není kvůli přehlednosti uveden nikde. Takovýto konec
řádku se ihned po přečtení zahodí a okolní syntaxe se posuzuje, jako
by tam nebyl. Může se tedy vyskytnout například i uvnitř
identifikátoru, ale narozdíl od jiných funkčních znaků uvedených
zpětným lomítkem se nestává součástí tohoto
identifikátoru. Zneškodněný konec řádku slouží k rozdělování
řádků za účelem zvýšení čitelnosti FS souboru člověkem.
Unární postfixové operátory "*", "+" a "?" znamenají, že operand se
vyskytne n-krát, přičemž pro "*" je n>=0, pro "+" je n>0 a pro "?" je n
buď 0, nebo 1.
Tam, kde lze neterminál interpretovat jako množinu, může být použit
binární operátor "-", který znamená rozdíl dvou množin.
Struktura souboru
Soubor se skládá ze záhlaví, obsahujícího definice atributů vrcholů stromů,
a z posloupnosti stromů.
- <soubor .fs> ::=
- <řádek definice>+ "\n"+ (<strom> "\n")+ <konfigurace
programu Graph>?
- <konfigurace programu Graph> ::=
- "(" <číslo> ("," <číslo>)* ")"
Poznámka: Čísla v konfiguraci programu jsou indexy atributů, které mají
být standardně zobrazeny. (Zobrazení ostatních lze zapnout.) Atributy musí být
seřazeny vzestupně, jinak program spadne. Není tedy možné vynutit si jiné pořadí
atributů při zobrazování stromu.
Identifikátor, název a hodnota atributu
Identifikátor je jeden ze základních prvků syntaxe souboru .fs. Je to řetězec
libovolných znaků od místa, kde identifikátor začíná, až do výskytu funkčního
znaku, který do identifikátoru nepatří. I tyto funkční znaky (s výjimkou
"\n") však mohou být součástí identifikátoru, pokud jsou uvedeny zpětným
lomítkem (uvozující zpětné lomítko součástí identifikátoru není).
Poznámka: Délka identifikátoru je omezená, a to různě podle jeho použití.
Pro název atributu je to 20 znaků, pro hodnotu atributu 120 znaků.
-
<název atributu> ::=
-
<identifikátor>
-
<hodnota atributu> ::=
-
<identifikátor>
-
<identifikátor> ::=
-
<identifikátorový znak>+
-
<identifikátorový znak> ::=
-
<neškodný znak> | <znak uvedený zpětným lomítkem>
-
<funkční znak> ::=
-
"\\" | "=" | "," | "[" | "]" | "|"
-
<neškodný znak> ::=
-
<libovolný znak>-<funkční znak>-"\n"
-
<znak uvedený zpětným lomítkem>
-
"\\" (<libovolný znak>-"\n")
Definice atributů vrcholu
Na začátku každého souboru se nachází záhlaví s definicemi atributů, které
se můžou vyskytnout u vrcholů stromu. Každý řádek záhlaví začíná zavináčem
('@'). Za ním následuje velké písmeno, které určuje vlastnost
atributu, pak mezera a jméno atributu. Např. "@P lemma".
Poznámka: V seznamu povolených hodnot v definici @L (<hodnoty>) se
jednotlivé hodnoty nesmí opakovat.
-
<řádek definice> ::=
-
("@" <vlastnost> <zobrazení>? " " <název atributu> "\n") |
-
("@L" <zobrazení>? " " <název atributu> "|" <hodnoty> "\n")
-
<vlastnost> ::=
-
"K" | "P" | "O" | "N" | "V"
-
<zobrazení> ::=
-
"1" | "2" | "3"
-
<hodnoty> ::=
-
<hodnota atributu> ("|" <hodnoty>)?
Vlastnosti
- K
- Obyčejný atribut bez zvláštních vlastností. Řádek začínající na
"@K" slouží pouze k zavedení jména atributu, který by jinak neměl
žádné řádky. Poznámka: písmeno "K" je zkratka za "klíčový".
- P
- Poziční atribut. Před jeho hodnotou se v souboru nemusí uvádět
jeho jméno, jako je tomu u ostatních atributů
(např. ord=7). Jméno atributu, kterému hodnota náleží, se pak
pozná podle relativní pozice vzhledem k hodnotám předcházejících
atributů (podrobnosti jsou uvedeny níže v odstavci "Vrchol").
- O
- Povinný atribut. Jeho hodnota musí být u každého uzlu neprázdná
(prázdný řetězec je výchozí hodnotou všech atributů), a musí být tedy
uvedena.
- L
- Výčtový atribut. Může nabývat pouze hodnot ze seznamu nebo být
prázdný (není-li ovšem povinný).
H
- Atribut pro skryté uzly. Pokud má uzel v tomto atributu
hodnotu "hide" a v prohlížeči stromů je zapnuto skrývání uzlů,
uzel a jeho podstrom budou v prohlížeči skryty.
N
- Číselný atribut (hodnotou je nezáporné celé číslo), udávající
lineární uspořádání uzlů. Jeho hodnota ovlivňuje x-ovou souřadnici
uzlu v prohlížečích stromů. Kvůli zpětné kompatibilitě ovlivňuje
také pořadí uzlů ve větě na stavovém řádku, pokud není definován žádný
atribut typu
@W
. Pokud není definován atribut
@N
, strom je v prohlížeči vycentrován bez ohledu na
to, zda je nebo není k dispozici atribut
@W
. V každém FS souboru může být definován nejvýše
jeden atribut typu @N
.
W
- Jiný číselný atribut udávající slovosled. Pokud je definováno i
@N
i @W
, pak první z nich udává
uspořádání uzlů ve stromu, zatímco druhý udává uspořádání slov
v lineárním zobrazení na stavovém řádku. Umožňuje to přeuspořádat
neprojektivní strom projektivně, aniž by bylo dotčeno zobrazení věty
na stavovém řádku.
V
- Hodnotový atribut. Jeho hodnota v jistém smyslu reprezentuje
celý uzel. V prohlížečích stromů se používá pro lineární
zobrazení věty na stavovém řádku. V každém FS souboru může být
definován nejvýše jeden takový atribut. Může být podtypu
@VH
, nebo @VA
. První podtyp je výchozí
(takže @V
je totéž jako @VH
) a znamená, že
hodnoty skrytých uzlů (viz atribut @H
) nebudou zobrazeny
ani na stavovém řádku. Druhý podtyp říká, že na stavovém řádku mají
být zobrazeny hodnoty všech uzlů včetně skrytých.
Pro jeden atribut lze definovat i více vlastností, jejichž
definiční řádky nemusí v záhlaví následovat těsně za sebou. Musí však
být dodrženy tyto doplňkové podmínky:
-
Atribut typu @V může být v celém souboru nejvýše jeden.
-
Atribut typu @N může být v celém souboru nejvýše jeden.
-
Vlastnost @N nesmí být kombinována s jinými vlastnostmi. Nicméně číselný
atribut je automaticky také poziční a povinný.
-
Tentýž atribut nesmí být současně @V a @L.
-
@L musí být poslední specifikovaná vlastnost daného atributu, nesmí však
být jediná.
Způsob zobrazení
Způsob zobrazení lze specifikovat volitelně. Lze například požadovat, aby
v grafovém editoru byla hodnota daného atributu vždy zvýrazněna, nebo naopak
znevýrazněna.
-
1
-
ATTR_SHADOW
-
2
-
ATTR_HILITE
-
3
-
ATTR_XHILITE
Příklad
Jako příklad může sloužit současná definice atributů pro český
tree-bank.
Strom
Stromy jsou popsány v obvyklé závorkové notaci, tj. za popisem vnitřního
vrcholu následuje v závorkách seznam jeho dětí (resp. jejich podstromů),
oddělených čárkami. Děti každého uzlu musí být uspořádány podle hodnot svého
číselného atributu @N, pokud ho mají. Při porušení této podmínky není v programu
Graph garantováno správné zobrazení stromu, pokud jde o projektivitu (zde se
předpokládá, že číselný atribut představuje index slova ve větě vzhledem ke
slovosledu).
-
<strom> ::=
-
<vrchol> ("(" <děti> ")")?
-
<děti> ::=
-
<strom> ("," <děti>)?
Vrchol
Kromě čisté syntaxe je ještě třeba dbát na vazbu mezi prvkem <atributy>
a definicí atributů, uvedenou v záhlaví konkrétního souboru. Omezující
podmínky z této vazby vyplývající jsou popsány níže.
-
<vrchol> ::=
-
<sada atributů> ("|" <vrchol>)?
-
<sada atributů> ::=
-
"[" <atributy>? "]"
-
<atributy> ::=
-
<atribut> ("," <atributy>)?
-
<atribut> ::=
-
(<název atributu> "=")? <hodnoty>
-
<hodnoty> ::=
-
<hodnota atributu> ("|" <hodnoty>)
Prvek <atributy> musí navíc splňovat následující podmínky (vyplývající
z konkrétní definice atributů, uvedené na začátku čteného souboru):
-
Není-li atribut poziční, potom musí být jeho název uveden povinně.
-
Jestliže není uveden název atributu, musí se určit, kterému atributu náleží
právě čtená hodnota. Je to první poziční atribut, jehož definice v záhlaví
následovala za definicí naposledy přečteného (pozičního nebo nepozičního)
atributu.
-
Identifikátor v prvku <název atributu> se musí shodovat se jménem některého
atributu, definovaného v záhlaví souboru.
-
Hodnota žádného parametru nesmí být přečtena opakovaně. To by se mohlo
stát, pokud je opakovaně uveden prvek <atribut> se stejným <název
atributu>, nebo pokud název není uveden, ale naposledy byla čtena hodnota
atributu, jehož definice bezprostředně předcházela definici pozičního atributu,
jehož hodnotu už známe.
-
Hodnotou číselného atributu může být pouze celé číslo (tj. řetězec nesmí
obsahovat nic jiného než číslice).
-
Hodnota výčtového atributu musí být obsažena ve výčtu uvedeném v definici
atributu.
-
Počet atributů (hodnot) v jedné sadě může být proměnlivý. Na konci sady
je však nutné zkontrolovat, že byly přečteny hodnoty všech povinných atributů.
Příklad
A tady je příklad celého FS souboru i s několika
stromy.