Грамматика ложбана/21.1
21.1. EBNF грамматика ложбана
Машинная грамматика ложбана, EBNF версия, окончательный базис.
Этот EBNF-документ является общественным достоянием согласно решению его автора, The Logical Language Group, Inc. Свяжитесь с этой организацией по адресу: 2904 Beau Lane, Fairfax VA 22031 USA 703-385-0273 (intl: +1 703 385 0273)
Объяснение обозначений:
Все правила имеют форму:
имяномер = bnf-выражение
что означает: грамматическая конструкция «имя» определён через «bnf-выражение». Номер является перекрестной ссылкой этой грамматики к номеру правила в грамматике YACC. Имена такиее же, что и в грамматике YACC, за исключением того, что подправила в грамматике YACC помечены как A, B, C, ... по сравнению с 1, 2, 3, .... в данной грамматике. Кроме того, правило 971 помечено как «simple_tag» в грамматике YACC, но «stag» в этой грамматике из-за его частого появления.
- Имена в нижнем регистре - это грамматические конструкции.
- Имена в ВЕРХНЕМ РЕГИСТРЕ являются именами selma'o (лексем) и являются терминальными.
- Конкатенация выражается последовательным позициронириованием конструкций без какого-либо символа оператора.
- | представляет чередование (выбор).
- [] представляет собой необязательный элемент.
- & представляет собой "и / или" («A & B» - это фактически то же, что и «A | B | A B»).
- ... представляет собой необязательное повторение конструкции слева. По умолчанию подразумевается левое группирование; правое группирование показано явной ссылающейся на саму себя рекурсией без «...»
- () используется для указания группировки других операторов. В противном случае «...» имеет степень группировки больше, чем &, которая группируется сильнее, чем при использовании |.
- # является сокращением для "[free ...]", конструкции, которая появляется во многих местах.
- // - это границы для так называемого опускаемого завершителя, которого можно опустить в речи (без изменения смысла), если только это не приводит к грамматической неоднозначности.
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 является универсальным завершителем и сигнализирует о завершении входного текста, подвергаемого синтаксическому разбору.