Грамматика ложбана/21.1: Difference between revisions

From Lojban
Jump to navigation Jump to search
(Улучшенная версия.)
Line 1: Line 1:
===21.1. EBNF грамматика ложбана===
===21.1. '''РБНФ''' грамматика ложбана===


Машинная грамматика ложбана, EBNF версия, окончательный базис.
Окончательная РБНФ версия синтаксиса языка ложбан.


Этот EBNF-документ является общественным достоянием согласно решению его автора, The Logical Language Group, Inc. Свяжитесь с этой организацией по адресу: 2904 Beau Lane, Fairfax VA 22031 USA 703-385-0273 (intl: +1 703 385 0273)
<u>Этот РБНФ-документ является общественным достоянием</u> согласно решению его создателей, The Logical Language Group, Inc. Свяжитесь с этой организацией по адресу: 2904 Beau Lane, Fairfax VA 22031 USA 703-385-0273 (междунар.: +1 703 385 0273)


Объяснение обозначений:
====Объяснение обозначений====
 
Все правила имеют форму: '''имя<sub>номер</sub> = bnf-выражение'''
Все правила имеют форму:
 
имя<sub>номер</sub> = bnf-выражение


что означает: грамматическая конструкция «имя» определён через «bnf-выражение». Номер является перекрестной ссылкой этой грамматики к номеру правила в грамматике YACC. Имена такиее же, что и в грамматике YACC, за исключением того, что подправила в грамматике YACC помечены как A, B, C, ... по сравнению с 1, 2, 3, .... в данной грамматике. Кроме того, правило 971 помечено как «simple_tag» в грамматике YACC, но «stag» в этой грамматике из-за его частого появления.
что означает: грамматическая конструкция «имя» определён через «bnf-выражение». Номер является перекрестной ссылкой этой грамматики к номеру правила в грамматике YACC. Имена такиее же, что и в грамматике YACC, за исключением того, что подправила в грамматике YACC помечены как A, B, C, ... по сравнению с 1, 2, 3, .... в данной грамматике. Кроме того, правило 971 помечено как «simple_tag» в грамматике YACC, но «stag» в этой грамматике из-за его частого появления.


# Имена в нижнем регистре - это грамматические конструкции.
#Имена в нижнем регистре - это грамматические конструкции.
# Имена в ВЕРХНЕМ РЕГИСТРЕ являются именами selma'o (лексем) и являются терминальными.
#Имена в ВЕРХНЕМ РЕГИСТРЕ являются именами selma'o (лексем) и являются терминальными.
# Конкатенация выражается последовательным позициронириованием конструкций без какого-либо символа оператора.
#Конкатенация выражается последовательным позициронириованием конструкций без какого-либо символа оператора.
# | представляет чередование (выбор).
#| представляет чередование (выбор).
# [] представляет собой необязательный элемент.
#[] представляет собой необязательный элемент.
# & представляет собой "и / или" («A & B» - это фактически то же, что и «A | B | A B»).
# & представляет собой "и / или" («A & B» - это фактически то же, что и «A | B | A B»).
# ... представляет собой необязательное повторение конструкции слева. По умолчанию подразумевается левое группирование; правое группирование показано явной ссылающейся на саму себя рекурсией без «...»
#... представляет собой необязательное повторение конструкции слева. По умолчанию подразумевается левое группирование; правое группирование показано явной ссылающейся на саму себя рекурсией без «...»
# () используется для указания группировки других операторов. В противном случае «...» имеет степень группировки больше, чем &, которая группируется сильнее, чем при использовании |.
#() используется для указания группировки других операторов. В противном случае «...» имеет степень группировки больше, чем &, которая группируется сильнее, чем при использовании |.
# # является сокращением для "[free ...]", конструкции, которая появляется во многих местах.
#<nowiki># является сокращением для "[free ...]", конструкции, которая появляется во многих местах.</nowiki>
# // - это границы для так называемого опускаемого завершителя, которого можно опустить в речи (без изменения смысла), если только это не приводит к грамматической неоднозначности.
#// - это границы для так называемого опускаемого завершителя, которого можно опустить в речи (без изменения смысла), если только это не приводит к грамматической неоднозначности.
 
text<sub>0</sub> = [NAI ...] [CMENE ... # | (indicators & free ...)] [joik-jek] text-1
text<sub>0</sub>=
 
[NAI ...] [CMENE ... # | (indicators & free ...)] [joik-jek] text-1
 
text-1<sub>2</sub>=
 
[(I [jek | joik] [[stag] BO] #) ... | NIhO ... #] [paragraphs]
 
paragraphs<sub>4</sub>=
 
paragraph [NIhO ... # paragraphs]
 
paragraph<sub>10</sub>=
 
(statement | fragment) [I # [statement | fragment]] ...
 
statement<sub>11</sub>=
 
statement-1 | prenex statement
 
statement-1<sub>12</sub>=
 
statement-2 [I joik-jek [statement-2]] ...
 
statement-2<sub>13</sub>=
 
statement-3 [I [jek | joik] [stag] BO # [statement-2]]
 
statement-3<sub>14</sub>=
 
sentence | [tag] TUhE # text-1 /TUhU#/
 
fragment<sub>20</sub>=
 
ek # | gihek # | quantifier | NA # | terms /VAU#/ | prenex | relative-clauses | links | linkargs
 
prenex<sub>30</sub>=
 
terms ZOhU #
 
sentence<sub>40</sub>=
 
[terms [CU #]] bridi-tail
 
subsentence<sub>41</sub>=
 
sentence | prenex subsentence
 
bridi-tail<sub>50</sub>=
 
bridi-tail-1 [gihek [stag] KE # bridi-tail /KEhE#/ tail-terms]
 
bridi-tail-1<sub>51</sub>=
 
bridi-tail-2 [gihek # bridi-tail-2 tail-terms] ...
 
bridi-tail-2<sub>52</sub>=
 
bridi-tail-3 [gihek [stag] BO # bridi-tail-2 tail-terms]
 
bridi-tail-3<sub>53</sub>=
 
selbri tail-terms | gek-sentence
 
gek-sentence<sub>54</sub>=
 
gek subsentence gik subsentence tail-terms | [tag] KE # gek-sentence /KEhE#/ | NA # gek-sentence
 
tail-terms<sub>71</sub>=
 
[terms] /VAU#/
 
terms<sub>80</sub>=
 
terms-1 ...
 
terms-1<sub>81</sub>=
 
terms-2 [PEhE # joik-jek terms-2] ...
 
terms-2<sub>82</sub>=
 
term [CEhE # term] ...
 
term<sub>83</sub>=
 
sumti | (tag | FA #) (sumti | /KU#/) | termset | NA KU #
 
termset<sub>85</sub>=
 
NUhI # gek terms /NUhU#/ gik terms /NUhU#/ | NUhI # terms /NUhU#/
 
sumti<sub>90</sub>=
 
sumti-1 [VUhO # relative-clauses]
 
sumti-1<sub>91</sub>=
 
sumti-2 [(ek | joik) [stag] KE # sumti /KEhE#/]
 
sumti-2<sub>92</sub>=
 
sumti-3 [joik-ek sumti-3] ...
 
sumti-3<sub>93</sub>=
 
sumti-4 [(ek | joik) [stag] BO # sumti-3]
 
sumti-4<sub>94</sub>=
 
sumti-5 | gek sumti gik sumti-4
 
sumti-5<sub>95</sub>=
 
[quantifier] sumti-6 [relative-clauses] | quantifier selbri /KU#/ [relative-clauses]
 
sumti-6<sub>97</sub>=
 
(LAhE # | NAhE BO #) [relative-clauses] sumti /LUhU#/ | KOhA # | lerfu-string /BOI#/ | LA # [relative-clauses] CMENE ... # | (LA | LE) # sumti-tail /KU#/ | LI # mex /LOhO#/ | ZO any-word # | LU text /LIhU#/ | LOhU any-word ... LEhU # | ZOI any-word anything any-word #
 
sumti-tail<sub>111</sub>=
 
[sumti-6 [relative-clauses]] sumti-tail-1 | relative-clauses sumti-tail-1
 
sumti-tail-1<sub>112</sub>=
 
[quantifier] selbri [relative-clauses] | quantifier sumti
 
relative-clauses<sub>121</sub>=
 
relative-clause [ZIhE # relative-clause] ...
 
relative-clause<sub>122</sub>=
 
GOI # term /GEhU#/ | NOI # subsentence /KUhO#/
 
selbri<sub>130</sub>=
 
[tag] selbri-1
 
selbri-1<sub>131</sub>=
 
selbri-2 | NA # selbri
 
selbri-2<sub>132</sub>=
 
selbri-3 [CO # selbri-2]
 
selbri-3<sub>133</sub>=
 
selbri-4 ...
 
selbri-4<sub>134</sub>=
 
selbri-5 [joik-jek selbri-5 | joik [stag] KE # selbri-3 /KEhE#/] ...
 
selbri-5<sub>135</sub>=
 
selbri-6 [(jek | joik) [stag] BO # selbri-5]
 
selbri-6<sub>136</sub>=
 
tanru-unit [BO # selbri-6] | [NAhE #] guhek selbri gik selbri-6
 
tanru-unit<sub>150</sub>=
 
tanru-unit-1 [CEI # tanru-unit-1] ...
 
tanru-unit-1<sub>151</sub>=
 
tanru-unit-2 [linkargs]
 
tanru-unit-2<sub>152</sub>=
 
BRIVLA # | GOhA [RAhO] # | KE # selbri-3 /KEhE#/ | ME # sumti /MEhU#/ [MOI #] | (number | lerfu-string) MOI # | NUhA # mex-operator | SE # tanru-unit-2 | JAI # [tag] tanru-unit-2 | any-word (ZEI any-word) ... | NAhE # tanru-unit-2 | NU [NAI] # [joik-jek NU [NAI] #] ... subsentence /KEI#/
 
linkargs<sub>160</sub>=
 
BE # term [links] /BEhO#/
 
links<sub>161</sub>=
 
BEI # term [links]
 
quantifier<sub>300</sub>=
 
number /BOI#/ | VEI # mex /VEhO#/
 
mex<sub>310</sub>=


mex-1 [operator mex-1] ... | FUhA # rp-expression
text-1<sub>2</sub> = [(I [jek | joik] [[stag] BO] #) ... | NIhO ... #] [paragraphs]


mex-1<sub>311</sub>=
paragraphs<sub>4</sub> = paragraph [NIhO ... # paragraphs]


mex-2 [BIhE # operator mex-1]
paragraph<sub>10</sub> = (statement | fragment) [I # [statement | fragment]] ...


mex-2<sub>312</sub>=
statement<sub>11</sub> = statement-1 | prenex statement


operand | [PEhO #] operator mex-2 ... /KUhE#/
statement-1<sub>12</sub> = statement-2 [I joik-jek [statement-2]] ...


rp-expression<sub>330</sub>=
statement-2<sub>13</sub> = statement-3 [I [jek | joik] [stag] BO # [statement-2]]


rp-operand rp-operand operator
statement-3<sub>14</sub> = sentence | [tag] TUhE # text-1 /TUhU#/


rp-operand<sub>332</sub>=
fragment<sub>20</sub> = ek # | gihek # | quantifier | NA # | terms /VAU#/ | prenex | relative-clauses | links | linkargs


operand | rp-expression
prenex<sub>30</sub> = terms ZOhU #


operator<sub>370</sub>=
sentence<sub>40</sub> = [terms [CU #]] bridi-tail


operator-1 [joik-jek operator-1 | joik [stag] KE # operator /KEhE#/] ...
subsentence<sub>41</sub> = sentence | prenex subsentence


operator-1<sub>371</sub>=
bridi-tail<sub>50</sub> = bridi-tail-1 [gihek [stag] KE # bridi-tail /KEhE#/ tail-terms]


operator-2 | guhek operator-1 gik operator-2 | operator-2 (jek | joik) [stag] BO # operator-1
bridi-tail-1<sub>51</sub> = bridi-tail-2 [gihek # bridi-tail-2 tail-terms] ...


operator-2<sub>372</sub>=
bridi-tail-2<sub>52</sub> = bridi-tail-3 [gihek [stag] BO # bridi-tail-2 tail-terms]


mex-operator | KE # operator /KEhE#/
bridi-tail-3<sub>53</sub> = selbri tail-terms | gek-sentence


mex-operator<sub>374</sub>=
gek-sentence<sub>54</sub> = gek subsentence gik subsentence tail-terms | [tag] KE # gek-sentence /KEhE#/ | NA # gek-sentence


SE # mex-operator | NAhE # mex-operator | MAhO # mex /TEhU#/ | NAhU # selbri /TEhU#/ | VUhU #
tail-terms<sub>71</sub> = [terms] /VAU#/


operand<sub>381</sub>=
terms<sub>80</sub> = terms-1 ...


operand-1 [(ek | joik) [stag] KE # operand /KEhE#/]
terms-1<sub>81</sub> = terms-2 [PEhE # joik-jek terms-2] ...


operand-1<sub>382</sub>=
terms-2<sub>82</sub> = term [CEhE # term] ...


operand-2 [joik-ek operand-2] ...
term<sub>83</sub> = sumti | (tag | FA #) (sumti | /KU#/) | termset | NA KU #


operand-2<sub>383</sub>=
termset<sub>85</sub> = NUhI # gek terms /NUhU#/ gik terms /NUhU#/ | NUhI # terms /NUhU#/


operand-3 [(ek | joik) [stag] BO # operand-2]
sumti<sub>90</sub> = sumti-1 [VUhO # relative-clauses]


operand-3<sub>385</sub>=
sumti-1<sub>91</sub> = sumti-2 [(ek | joik) [stag] KE # sumti /KEhE#/]


quantifier | lerfu-string /BOI#/ | NIhE # selbri /TEhU#/ | MOhE # sumti /TEhU#/ | JOhI # mex-2 ... /TEhU#/ | gek operand gik operand-3 | (LAhE # | NAhE BO #) operand /LUhU#/
sumti-2<sub>92</sub> = sumti-3 [joik-ek sumti-3] ...


number<sub>812</sub>=
sumti-3<sub>93</sub> = sumti-4 [(ek | joik) [stag] BO # sumti-3]


PA [PA | lerfu-word] ...
sumti-4<sub>94</sub> = sumti-5 | gek sumti gik sumti-4


lerfu-string<sub>817</sub>=
sumti-5<sub>95</sub> = [quantifier] sumti-6 [relative-clauses] | quantifier selbri /KU#/ [relative-clauses]


lerfu-word [PA | lerfu-word] ...
sumti-6<sub>97</sub> = (LAhE # | NAhE BO #) [relative-clauses] sumti /LUhU#/ | KOhA # | lerfu-string /BOI#/ | LA # [relative-clauses] CMENE ... # | (LA | LE) # sumti-tail /KU#/ | LI # mex /LOhO#/ | ZO any-word # | LU text /LIhU#/ | LOhU any-word ... LEhU # | ZOI any-word anything any-word #


lerfu-word<sub>987</sub>=
sumti-tail<sub>111</sub> = [sumti-6 [relative-clauses]] sumti-tail-1 | relative-clauses sumti-tail-1


BY | any-word BU | LAU lerfu-word | TEI lerfu-string FOI
sumti-tail-1<sub>112</sub> = [quantifier] selbri [relative-clauses] | quantifier sumti


ek<sub>802</sub>=
relative-clauses<sub>121</sub> = relative-clause [ZIhE # relative-clause] ...


[NA] [SE] A [NAI]
relative-clause<sub>122</sub> = GOI # term /GEhU#/ | NOI # subsentence /KUhO#/


gihek<sub>818</sub>=
selbri<sub>130</sub> = [tag] selbri-1


[NA] [SE] GIhA [NAI]
selbri-1<sub>131</sub> = selbri-2 | NA # selbri


jek<sub>805</sub>=
selbri-2<sub>132</sub> = selbri-3 [CO # selbri-2]


[NA] [SE] JA [NAI]
selbri-3<sub>133</sub> = selbri-4 ...


joik<sub>806</sub>=
selbri-4<sub>134</sub> = selbri-5 [joik-jek selbri-5 | joik [stag] KE # selbri-3 /KEhE#/] ...


[SE] JOI [NAI] | interval | GAhO interval GAhO
selbri-5<sub>135</sub> = selbri-6 [(jek | joik) [stag] BO # selbri-5]


interval<sub>932</sub>=
selbri-6<sub>136</sub> = tanru-unit [BO # selbri-6] | [NAhE #] guhek selbri gik selbri-6


[SE] BIhI [NAI]
tanru-unit<sub>150</sub> = tanru-unit-1 [CEI # tanru-unit-1] ...


joik-ek<sub>421</sub>=
tanru-unit-1<sub>151</sub> = tanru-unit-2 [linkargs]


joik # | ek #
tanru-unit-2<sub>152</sub> = BRIVLA # | GOhA [RAhO] # | KE # selbri-3 /KEhE#/ | ME # sumti /MEhU#/ [MOI #] | (number | lerfu-string) MOI # | NUhA # mex-operator | SE # tanru-unit-2 | JAI # [tag] tanru-unit-2 | any-word (ZEI any-word) ... | NAhE # tanru-unit-2 | NU [NAI] # [joik-jek NU [NAI] #] ... subsentence /KEI#/


joik-jek<sub>422</sub>=
linkargs<sub>160</sub> = BE # term [links] /BEhO#/


joik # | jek #
links<sub>161</sub> = BEI # term [links]


gek<sub>807</sub>=
quantifier<sub>300</sub> = number /BOI#/ | VEI # mex /VEhO#/


[SE] GA [NAI] # | joik GI # | stag gik
mex<sub>310</sub> = mex-1 [operator mex-1] ... | FUhA # rp-expression


guhek<sub>808</sub>=
mex-1<sub>311</sub> = mex-2 [BIhE # operator mex-1]


[SE] GUhA [NAI] #
mex-2<sub>312</sub> = operand | [PEhO #] operator mex-2 ... /KUhE#/


gik<sub>816</sub>=
rp-expression<sub>330</sub> = rp-operand rp-operand operator


GI [NAI] #
rp-operand<sub>332</sub> = operand | rp-expression


tag<sub>491</sub>=
operator<sub>370</sub> = operator-1 [joik-jek operator-1 | joik [stag] KE # operator /KEhE#/] ...


tense-modal [joik-jek tense-modal] ...
operator-1<sub>371</sub> = operator-2 | guhek operator-1 gik operator-2 | operator-2 (jek | joik) [stag] BO # operator-1


stag<sub>971</sub>=
operator-2<sub>372</sub> = mex-operator | KE # operator /KEhE#/


simple-tense-modal [(jek | joik) simple-tense-modal] ...
mex-operator<sub>374</sub> = SE # mex-operator | NAhE # mex-operator | MAhO # mex /TEhU#/ | NAhU # selbri /TEhU#/ | VUhU #


tense-modal<sub>815</sub>=
operand<sub>381</sub> = operand-1 [(ek | joik) [stag] KE # operand /KEhE#/]


simple-tense-modal # | FIhO # selbri /FEhU#/
operand-1<sub>382</sub> = operand-2 [joik-ek operand-2] ...


simple-tense-modal<sub>972</sub>=
operand-2<sub>383</sub> = operand-3 [(ek | joik) [stag] BO # operand-2]


[NAhE] [SE] BAI [NAI] [KI] | [NAhE] (time [space] | space [time]) & CAhA [KI] | KI | CUhE
operand-3<sub>385</sub> = quantifier | lerfu-string /BOI#/ | NIhE # selbri /TEhU#/ | MOhE # sumti /TEhU#/ | JOhI # mex-2 ... /TEhU#/ | gek operand gik operand-3 | (LAhE # | NAhE BO #) operand /LUhU#/


time<sub>1030</sub>=
number<sub>812</sub> = PA [PA | lerfu-word] ...


ZI & time-offset ... & ZEhA [PU [NAI]] & interval-property ...
lerfu-string<sub>817</sub> = lerfu-word [PA | lerfu-word] ...


time-offset<sub>1033</sub>=
lerfu-word<sub>987</sub> = BY | any-word BU | LAU lerfu-word | TEI lerfu-string FOI


PU [NAI] [ZI]
ek<sub>802</sub> = [NA] [SE] A [NAI]


space<sub>1040</sub>=
gihek<sub>818</sub> = [NA] [SE] GIhA [NAI]


VA & space-offset ... & space-interval & (MOhI space-offset)
jek<sub>805</sub> = [NA] [SE] JA [NAI]


space-offset<sub>1045</sub>=
joik<sub>806</sub> = [SE] JOI [NAI] | interval | GAhO interval GAhO


FAhA [NAI] [VA]
interval<sub>932</sub> = [SE] BIhI [NAI]


space-interval<sub>1046</sub>=
joik-ek<sub>421</sub> = joik # | ek #


((VEhA & VIhA) [FAhA [NAI]]) & space-int-props
joik-jek<sub>422</sub> = joik # | jek #


space-int-props<sub>1049</sub>=
gek<sub>807</sub> = [SE] GA [NAI] # | joik GI # | stag gik


(FEhE interval-property) ...
guhek<sub>808</sub> = [SE] GUhA [NAI] #


interval-property<sub>1051</sub>=
gik<sub>816</sub> = GI [NAI] #


number ROI [NAI] | TAhE [NAI] | ZAhO [NAI]
tag<sub>491</sub> = tense-modal [joik-jek tense-modal] ...


free<sub>32</sub>=
stag<sub>971</sub> = simple-tense-modal [(jek | joik) simple-tense-modal] ...


SEI # [terms [CU #]] selbri /SEhU/ | SOI # sumti [sumti] /SEhU/ | vocative [relative-clauses] selbri [relative-clauses] /DOhU/ | vocative [relative-clauses] CMENE ... # [relative-clauses] /DOhU/ | vocative [sumti] /DOhU/ | (number | lerfu-string) MAI | TO text /TOI/ | XI # (number | lerfu-string) /BOI/ | XI # VEI # mex /VEhO/
tense-modal<sub>815</sub> = simple-tense-modal # | FIhO # selbri /FEhU#/


vocative<sub>415</sub>=
simple-tense-modal<sub>972</sub> = [NAhE] [SE] BAI [NAI] [KI] | [NAhE] (time [space] | space [time]) & CAhA [KI] | KI | CUhE


(COI [NAI]) ... & DOI
time<sub>1030</sub> = ZI & time-offset ... & ZEhA [PU [NAI]] & interval-property ...


indicators<sub>411</sub>=
time-offset<sub>1033</sub> = PU [NAI] [ZI]


[FUhE] indicator ...
space<sub>1040</sub> = VA & space-offset ... & space-interval & (MOhI space-offset)


indicator<sub>413</sub>=
space-offset<sub>1045</sub> = FAhA [NAI] [VA]


(UI | CAI) [NAI] | Y | DAhO | FUhO
space-interval<sub>1046</sub>= ((VEhA & VIhA) [FAhA [NAI]]) & space-int-props


Следующие правила являются неформальными:
space-int-props<sub>1049</sub> = (FEhE interval-property) ...


word<sub>1100</sub>=
interval-property<sub>1051</sub> = number ROI [NAI] | TAhE [NAI] | ZAhO [NAI]


[BAhE] any-word [indicators]
free<sub>32</sub> = SEI # [terms [CU #]] selbri /SEhU/ | SOI # sumti [sumti] /SEhU/ | vocative [relative-clauses] selbri [relative-clauses] /DOhU/ | vocative [relative-clauses] CMENE ... # [relative-clauses] /DOhU/ | vocative [sumti] /DOhU/ | (number | lerfu-string) MAI | TO text /TOI/ | XI # (number | lerfu-string) /BOI/ | XI # VEI # mex /VEhO/


any-word =
vocative<sub>415</sub> = (COI [NAI]) ... & DOI


“любое одинарное слово (не включает составные cmavo)”
indicators<sub>411</sub> = [FUhE] indicator ...


anything =
indicator<sub>413</sub> = (UI | CAI) [NAI] | Y | DAhO | FUhO


“любой текст вообще, неважно ложбанский или нет”
=====Следующие правила являются неформальными:=====
word<sub>1100</sub> = [BAhE] any-word [indicators]


null<sub>1101</sub>=
any-word = “любое одинарное слово (не включает составные cmavo)”


any-word SI | utterance SA | text SU
anything = “любой текст вообще, неважно ложбанский или нет”


FAhO является универсальным завершителем и сигнализирует о завершении входного текста, подвергаемого синтаксическому разбору.
null<sub>1101</sub> = any-word SI | utterance SA | text SU
"FAhO" является универсальным завершителем и сигнализирует о завершении входного текста, подвергаемого синтаксическому разбору.

Revision as of 16:34, 13 June 2021

21.1. РБНФ грамматика ложбана

Окончательная РБНФ версия синтаксиса языка ложбан.

Этот РБНФ-документ является общественным достоянием согласно решению его создателей, The Logical Language Group, Inc. Свяжитесь с этой организацией по адресу: 2904 Beau Lane, Fairfax VA 22031 USA 703-385-0273 (междунар.: +1 703 385 0273)

Объяснение обозначений

Все правила имеют форму: имяномер = bnf-выражение

что означает: грамматическая конструкция «имя» определён через «bnf-выражение». Номер является перекрестной ссылкой этой грамматики к номеру правила в грамматике YACC. Имена такиее же, что и в грамматике YACC, за исключением того, что подправила в грамматике YACC помечены как A, B, C, ... по сравнению с 1, 2, 3, .... в данной грамматике. Кроме того, правило 971 помечено как «simple_tag» в грамматике YACC, но «stag» в этой грамматике из-за его частого появления.

  1. Имена в нижнем регистре - это грамматические конструкции.
  2. Имена в ВЕРХНЕМ РЕГИСТРЕ являются именами selma'o (лексем) и являются терминальными.
  3. Конкатенация выражается последовательным позициронириованием конструкций без какого-либо символа оператора.
  4. | представляет чередование (выбор).
  5. [] представляет собой необязательный элемент.
  6. & представляет собой "и / или" («A & B» - это фактически то же, что и «A | B | A B»).
  7. ... представляет собой необязательное повторение конструкции слева. По умолчанию подразумевается левое группирование; правое группирование показано явной ссылающейся на саму себя рекурсией без «...»
  8. () используется для указания группировки других операторов. В противном случае «...» имеет степень группировки больше, чем &, которая группируется сильнее, чем при использовании |.
  9. # является сокращением для "[free ...]", конструкции, которая появляется во многих местах.
  10. // - это границы для так называемого опускаемого завершителя, которого можно опустить в речи (без изменения смысла), если только это не приводит к грамматической неоднозначности.
text0 = [NAI ...] [CMENE ... # | (indicators & free ...)] [joik-jek] text-1
text-12 = [(I [jek | joik] [[stag] BO] #) ... | NIhO ... #] [paragraphs]
paragraphs4 = paragraph [NIhO ... # paragraphs]
paragraph10 = (statement | fragment) [I # [statement | fragment]] ...
statement11 = statement-1 | prenex statement
statement-112 = statement-2 [I joik-jek [statement-2]] ...
statement-213 = statement-3 [I [jek | joik] [stag] BO # [statement-2]]
statement-314 = sentence | [tag] TUhE # text-1 /TUhU#/
fragment20 = ek # | gihek # | quantifier | NA # | terms /VAU#/ | prenex | relative-clauses | links | linkargs
prenex30 = terms ZOhU #
sentence40 = [terms [CU #]] bridi-tail
subsentence41 = sentence | prenex subsentence
bridi-tail50 = bridi-tail-1 [gihek [stag] KE # bridi-tail /KEhE#/ tail-terms]
bridi-tail-151 = bridi-tail-2 [gihek # bridi-tail-2 tail-terms] ...
bridi-tail-252 = bridi-tail-3 [gihek [stag] BO # bridi-tail-2 tail-terms]
bridi-tail-353 = selbri tail-terms | gek-sentence
gek-sentence54 = gek subsentence gik subsentence tail-terms | [tag] KE # gek-sentence /KEhE#/ | NA # gek-sentence
tail-terms71 = [terms] /VAU#/
terms80 = terms-1 ...
terms-181 = terms-2 [PEhE # joik-jek terms-2] ...
terms-282 = term [CEhE # term] ...
term83 = sumti | (tag | FA #) (sumti | /KU#/) | termset | NA KU #
termset85 = NUhI # gek terms /NUhU#/ gik terms /NUhU#/ | NUhI # terms /NUhU#/
sumti90 = sumti-1 [VUhO # relative-clauses]
sumti-191 = sumti-2 [(ek | joik) [stag] KE # sumti /KEhE#/]
sumti-292 = sumti-3 [joik-ek sumti-3] ...
sumti-393 = sumti-4 [(ek | joik) [stag] BO # sumti-3]
sumti-494 = sumti-5 | gek sumti gik sumti-4
sumti-595 = [quantifier] sumti-6 [relative-clauses] | quantifier selbri /KU#/ [relative-clauses]
sumti-697 = (LAhE # | NAhE BO #) [relative-clauses] sumti /LUhU#/ | KOhA # | lerfu-string /BOI#/ | LA # [relative-clauses] CMENE ... # | (LA | LE) # sumti-tail /KU#/ | LI # mex /LOhO#/ | ZO any-word # | LU text /LIhU#/ | LOhU any-word ... LEhU # | ZOI any-word anything any-word #
sumti-tail111 = [sumti-6 [relative-clauses]] sumti-tail-1 | relative-clauses sumti-tail-1
sumti-tail-1112 = [quantifier] selbri [relative-clauses] | quantifier sumti
relative-clauses121 = relative-clause [ZIhE # relative-clause] ...
relative-clause122 = GOI # term /GEhU#/ | NOI # subsentence /KUhO#/
selbri130 = [tag] selbri-1
selbri-1131 = selbri-2 | NA # selbri
selbri-2132 = selbri-3 [CO # selbri-2]
selbri-3133 = selbri-4 ...
selbri-4134 = selbri-5 [joik-jek selbri-5 | joik [stag] KE # selbri-3 /KEhE#/] ...
selbri-5135 = selbri-6 [(jek | joik) [stag] BO # selbri-5]
selbri-6136 = tanru-unit [BO # selbri-6] | [NAhE #] guhek selbri gik selbri-6
tanru-unit150 = tanru-unit-1 [CEI # tanru-unit-1] ...
tanru-unit-1151 = tanru-unit-2 [linkargs]
tanru-unit-2152 = BRIVLA # | GOhA [RAhO] # | KE # selbri-3 /KEhE#/ | ME # sumti /MEhU#/ [MOI #] | (number | lerfu-string) MOI # | NUhA # mex-operator | SE # tanru-unit-2 | JAI # [tag] tanru-unit-2 | any-word (ZEI any-word) ... | NAhE # tanru-unit-2 | NU [NAI] # [joik-jek NU [NAI] #] ... subsentence /KEI#/
linkargs160 = BE # term [links] /BEhO#/
links161 = BEI # term [links]
quantifier300 = number /BOI#/ | VEI # mex /VEhO#/
mex310 = mex-1 [operator mex-1] ... | FUhA # rp-expression
mex-1311 = mex-2 [BIhE # operator mex-1]
mex-2312 = operand | [PEhO #] operator mex-2 ... /KUhE#/
rp-expression330 = rp-operand rp-operand operator
rp-operand332 = operand | rp-expression
operator370 = operator-1 [joik-jek operator-1 | joik [stag] KE # operator /KEhE#/] ...
operator-1371 = operator-2 | guhek operator-1 gik operator-2 | operator-2 (jek | joik) [stag] BO # operator-1
operator-2372 = mex-operator | KE # operator /KEhE#/
mex-operator374 = SE # mex-operator | NAhE # mex-operator | MAhO # mex /TEhU#/ | NAhU # selbri /TEhU#/ | VUhU #
operand381 = operand-1 [(ek | joik) [stag] KE # operand /KEhE#/]
operand-1382 = operand-2 [joik-ek operand-2] ...
operand-2383 = operand-3 [(ek | joik) [stag] BO # operand-2]
operand-3385 = quantifier | lerfu-string /BOI#/ | NIhE # selbri /TEhU#/ | MOhE # sumti /TEhU#/ | JOhI # mex-2 ... /TEhU#/ | gek operand gik operand-3 | (LAhE # | NAhE BO #) operand /LUhU#/
number812 = PA [PA | lerfu-word] ...
lerfu-string817 = lerfu-word [PA | lerfu-word] ...
lerfu-word987 = BY | any-word BU | LAU lerfu-word | TEI lerfu-string FOI
ek802 = [NA] [SE] A [NAI]
gihek818 = [NA] [SE] GIhA [NAI]
jek805 = [NA] [SE] JA [NAI]
joik806 = [SE] JOI [NAI] | interval | GAhO interval GAhO
interval932 = [SE] BIhI [NAI]
joik-ek421 = joik # | ek #
joik-jek422 = joik # | jek #
gek807 = [SE] GA [NAI] # | joik GI # | stag gik
guhek808 = [SE] GUhA [NAI] #
gik816 = GI [NAI] #
tag491 = tense-modal [joik-jek tense-modal] ...
stag971 = simple-tense-modal [(jek | joik) simple-tense-modal] ...
tense-modal815 = simple-tense-modal # | FIhO # selbri /FEhU#/
simple-tense-modal972 = [NAhE] [SE] BAI [NAI] [KI] | [NAhE] (time [space] | space [time]) & CAhA [KI] | KI | CUhE
time1030 = ZI & time-offset ... & ZEhA [PU [NAI]] & interval-property ...
time-offset1033 = PU [NAI] [ZI]
space1040 = VA & space-offset ... & space-interval & (MOhI space-offset)
space-offset1045 = FAhA [NAI] [VA]
space-interval1046= ((VEhA & VIhA) [FAhA [NAI]]) & space-int-props
space-int-props1049 = (FEhE interval-property) ...
interval-property1051 = number ROI [NAI] | TAhE [NAI] | ZAhO [NAI]
free32 = SEI # [terms [CU #]] selbri /SEhU/ | SOI # sumti [sumti] /SEhU/ | vocative [relative-clauses] selbri [relative-clauses] /DOhU/ | vocative [relative-clauses] CMENE ... # [relative-clauses] /DOhU/ | vocative [sumti] /DOhU/ | (number | lerfu-string) MAI | TO text /TOI/ | XI # (number | lerfu-string) /BOI/ | XI # VEI # mex /VEhO/
vocative415 = (COI [NAI]) ... & DOI
indicators411 = [FUhE] indicator ...
indicator413 = (UI | CAI) [NAI] | Y | DAhO | FUhO
Следующие правила являются неформальными:
word1100 = [BAhE] any-word [indicators]
any-word = “любое одинарное слово (не включает составные cmavo)”
anything = “любой текст вообще, неважно ложбанский или нет”
null1101 = any-word SI | utterance SA | text SU

"FAhO" является универсальным завершителем и сигнализирует о завершении входного текста, подвергаемого синтаксическому разбору.