Created
April 24, 2018 15:53
-
-
Save otac0n/63d8fae45c551c4e8d41c83c53afc17e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright (c) 2013, 2014 Masato Hagiwara | |
// https://github.com/mhagiwara/camxes.js | |
// Copyright (c) 2018 John Gietzen | |
// This source is subject to the MIT license. Please see license.md for more information. | |
// Originally from http://users.digitalkingdom.org/~rlpowell/hobbies/lojban/grammar/index.html | |
@using System.Linq; | |
@members | |
{ | |
private static string _join(IEnumerable<object> items) | |
{ | |
return string.Concat(items); | |
} | |
private static string _join(string value) | |
{ | |
return value; | |
} | |
} | |
text <object> -lexical = intro:intro_null nai:NAI_clause* textA:text_part_2 joik:(<object> !text_1 j:joik_jek { j })? textB:text_1? faho:faho_clause EOF? { new { label = "text", arg = new[] { intro }.Concat(nai).Concat(new[] { textA }).Concat(joik).Concat(textB).Concat(new[] { faho }).ToArray() } } | |
intro_null <object> = pre:(<object[]> a:spaces? b:su_clause* { a.Concat(b).ToArray() }) arg:intro_si_clause { new { label = "intro_null", pre, arg } } | |
text_part_2 <object> = expr:((CMENE_clause+ / indicators?) free*) { new { label = "text_part_2", arg = expr } } | |
intro_si_clause <object> = a:si_clause? b:SI_clause* { new { label = "intro_si_clause", arg = a.Concat(b).ToArray() } } | |
faho_clause <object> = expr:(FAhO_clause dot_star)? { new { label = "faho_clause", arg = expr } } | |
text_1 <object> -memoize = expr:(<object> I_clause (jek / joik)? (stag? BO_clause)? free* text_1? / NIhO_clause+ free* su_clause* paragraphs? / paragraphs) { new { label = "text_1", arg = expr } } | |
paragraphs <object> = arg:paragraphs_inner { new { label = "paragraphs", arg } } | |
paragraphs_inner <object[]> = p:paragraph delimit:(<object[]> niho:NIhO_clause+ free:free* su:su_clause* rest:paragraphs_inner { new[] { niho }.Concat(free).Concat(su).Concat(rest).ToArray() })? { new[] { p }.Concat(delimit.SelectMany(d => d)).ToArray() } | |
paragraph <object> -memoize = arg:paragraph_inner { new { label = "paragraph", arg } } | |
paragraph_inner <object[]> = s:(statement / fragment) delimit:(<object[]> i:I_clause !jek !joik !joik_jek free:free* rest:paragraph_inner { new[] { i }.Concat(free).Concat(rest).ToArray() })? { new[] { s }.Concat(delimit.SelectMany(d => d)).ToArray() } | |
statement <object> | |
= arg:statement_1 { new { label = "statement", arg } } | |
/ pre:prenex arg:statement { new { label = "statement", pre, arg } } | |
statement_1 <object> | |
= s:statement_2 rest:(<object[]> i:I_clause j:joik_jek s2:statement_2? { new[] { i, j }.Concat(s2).ToArray() })* { new { label = "statement_1", arg = new[] { s }.Concat(rest.SelectMany(x => x)) } } | |
statement_2 <object> | |
= s:statement_3 rest:(<object[]> i:I_clause j:(jek / joik)? st:stag? bo:BO_clause f:free* s2:statement_2? { new[] { i }.Concat(j).Concat(st).Concat(new[] { bo }).Concat(f).Concat(s2).ToArray() })? { new { label = "statement_2", arg = new[] { s }.Concat(rest.SelectMany(x => x)) } } | |
statement_3 <object> | |
= arg:sentence { new { label = "statement_3", arg } } | |
/ tag:tag? tuhe:TUhE_clause f1:free* text:text_1 tuhu:TUhU_clause? f2:free* { new { label = "statement_3", arg = tag.Concat(new[] { tuhe }).Concat(f1).Concat(new [] { text }).Concat(tuhu).Concat(f1).ToArray() } } | |
fragment <object> = expr:(prenex / terms VAU_clause? free* / ek free* / gihek free* / quantifier / NA_clause !JA_clause free* / relative_clauses / links / linkargs) { new { label = "fragment", arg = expr } } | |
prenex <object> = expr:(terms ZOhU_clause free*) { new { label = "prenex", arg = expr } } | |
sentence <object> = pre:(<object[]> t:terms b1:bridi_tail_sa* cu:CU_clause? f:free* { new[] { t }.Concat(b1).Concat(cu).Concat(f).ToArray() })? b2:bridi_tail_sa* tail:bridi_tail { new { label = "sentence", arg = pre.SelectMany(x => x).Concat(b2).Concat(new [] { tail }).ToArray() } } | |
sentence_sa <object> = expr:(sentence_start (!sentence_start (sa_word / SA_clause !sentence_start ) )* SA_clause &text_1) { new { label = "sentence_sa", arg = expr } } | |
sentence_start <object> = arg:(I_pre / NIhO_pre) { new { label = "sentence_start", arg } } | |
subsentence <object> | |
= arg:sentence { new { label = "subsentence", arg } } | |
/ pre:prenex arg:subsentence { new { label = "subsentence", pre, arg } } | |
bridi_tail <object> -memoize = expr:(bridi_tail_1 (gihek stag? KE_clause free* bridi_tail KEhE_clause? free* tail_terms)?) { new { label = "bridi_tail", arg = expr } } | |
bridi_tail_sa <object> = expr:(bridi_tail_start (term / !bridi_tail_start (sa_word / SA_clause !bridi_tail_start ) )* SA_clause &bridi_tail) { new { label = "bridi_tail_sa", arg = expr } } | |
bridi_tail_start <object> = expr:(ME_clause / NUhA_clause / NU_clause / NA_clause !KU_clause / NAhE_clause !BO_clause / selbri / tag bridi_tail_start / KE_clause bridi_tail_start / bridi_tail) { new { label = "bridi_tail_start", arg = expr } } | |
bridi_tail_1 <object> = expr:(bridi_tail_2 (gihek !(stag? BO_clause) !(stag? KE_clause) free* bridi_tail_2 tail_terms)*) { new { label = "bridi_tail_1", arg = expr } } | |
bridi_tail_2 <object> = expr:(bridi_tail_3 (gihek stag? BO_clause free* bridi_tail_2 tail_terms)?) { new { label = "bridi_tail_2", arg = expr } } | |
bridi_tail_3 <object> = expr:(<object> s:selbri t:tail_terms { new { selbri = s, trail_terms = t } } / gek_sentence) { new { label = "bridi_tail_3", arg = expr } } | |
gek_sentence <object> = expr:(gek subsentence gik subsentence tail_terms / tag? KE_clause free* gek_sentence KEhE_clause? free* / NA_clause free* gek_sentence) { new { label = "gek_sentence", arg = expr } } | |
tail_terms <object> = expr:(terms? VAU_clause? free*) { expr == null ? null : new { label = "tail_terms", arg = expr } } | |
terms <object> = arg:terms_1+ { new { label = "terms", arg } } | |
terms_1 <object> = expr:(terms_2 (pehe_sa* PEhE_clause free* joik_jek terms_2)*) { new { label = "terms_1", arg = expr } } | |
terms_2 <object> = expr:(term (cehe_sa* CEhE_clause free* term)*) { new { label = "terms_2", arg = expr } } | |
pehe_sa <object> = expr:(PEhE_clause (!PEhE_clause (sa_word / SA_clause !PEhE_clause))* SA_clause) { new { label = "pehe_sa", arg = expr } } | |
cehe_sa <object> = expr:(CEhE_clause (!CEhE_clause (sa_word / SA_clause !CEhE_clause))* SA_clause) { new { label = "cehe_sa", arg = expr } } | |
term <object> = expr:(term_sa* term_1) { new { label = "term", arg = expr } } | |
term_1 <object> = expr:(sumti / ( !gek (tag / FA_clause free*) (sumti / KU_clause? free*) ) / termset / NA_clause KU_clause free*) { new { label = "term_1", arg = expr } } | |
term_sa <object> = expr:(term_start (!term_start (sa_word / SA_clause !term_start ) )* SA_clause &term_1) { new { label = "term_sa", arg = expr } } | |
term_start <object> = expr:(term_1 / LA_clause / LE_clause / LI_clause / LU_clause / LAhE_clause / quantifier term_start / gek sumti gik / FA_clause / tag term_start) { new { label = "term_start", arg = expr } } | |
termset <object> = termset:(gek_termset / NUhI_clause free* gek terms NUhU_clause? free* gik terms NUhU_clause? free* / NUhI_clause free* terms NUhU_clause? free*) { new { label = "termset", arg = termset } } | |
gek_termset <object> = expr:(gek terms_gik_terms) { new { label = "gek_termset", arg = expr } } | |
terms_gik_terms <object> = expr:(term (gik / terms_gik_terms) term) { new { label = "terms_gik_terms", arg = expr } } | |
sumti <object> = expr:(sumti_1 (VUhO_clause free* relative_clauses)?) { new { label = "sumti", arg = expr } } | |
sumti_1 <object> = expr:(sumti_2 (joik_ek stag? KE_clause free* sumti KEhE_clause? free*)?) { new { label = "sumti_1", arg = expr } } | |
sumti_2 <object> = expr:(sumti_3 (joik_ek sumti_3)*) { new { label = "sumti_2", arg = expr } } | |
sumti_3 <object> = expr:(sumti_4 (joik_ek stag? BO_clause free* sumti_3)?) { new { label = "sumti_3", arg = expr } } | |
sumti_4 <object> = expr:(sumti_5 / gek sumti gik sumti_4) { new { label = "sumti_4", arg = expr } } | |
sumti_5 <object> = expr:(quantifier? sumti_6 relative_clauses? / quantifier selbri KU_clause? free* relative_clauses?) { new { label = "sumti_5", arg = expr } } | |
sumti_6 <object> = expr:(<object> ZO_clause free* / ZOI_clause free* / LOhU_clause free* / lerfu_string !MOI_clause BOI_clause? free* / LU_clause text LIhU_clause? free* / (LAhE_clause free* / NAhE_clause BO_clause free*) relative_clauses? sumti LUhU_clause? free* / KOhA_clause free* / LA_clause free* relative_clauses? CMENE_clause+ free* / (LA_clause / LE_clause) free* sumti_tail KU_clause? free* / li_clause) { new { label = "sumti_6", arg = expr } } | |
li_clause <object> = expr:(LI_clause free* mex LOhO_clause? free*) { new { label = "li_clause", arg = expr } } | |
sumti_tail <object> -memoize = expr:((sumti_6 relative_clauses?)? sumti_tail_1 / relative_clauses sumti_tail_1) { new { label = "sumti_tail", arg = expr } } | |
sumti_tail_1 <object> = expr:(selbri relative_clauses? / quantifier selbri relative_clauses? / quantifier sumti) { new { label = "sumti_tail_1", arg = expr } } | |
relative_clauses <object> = expr:(relative_clause (ZIhE_clause free* relative_clause)*) { new { label = "relative_clauses", arg = expr } } | |
// relative_clause = GOI_clause free* term GEhU_clause? free* / NOI_clause free* subsentence KUhO_clause? free* | |
relative_clause <object> = expr:(relative_clause_sa* relative_clause_1) { new { label = "relative_clause", arg = expr } } | |
relative_clause_sa <object> = expr:(relative_clause_start (!relative_clause_start (sa_word / SA_clause !relative_clause_start ) )* SA_clause &relative_clause_1) { new { label = "relative_clause_sa", arg = expr } } | |
relative_clause_1 <object> = expr:(GOI_clause free* term GEhU_clause? free* / NOI_clause free* subsentence KUhO_clause? free* ) { new { label = "relative_clause_1", arg = expr } } | |
relative_clause_start <object> = expr:(GOI_clause / NOI_clause) { new { label = "relative_clause_start", arg = expr } } | |
selbri <object> = expr:(tag? selbri_1) { new { label = "selbri", arg = expr } } | |
selbri_1 <object> = expr:(selbri_2 / NA_clause free* selbri) { new { label = "selbri_1", arg = expr } } | |
selbri_2 <object> = expr:(selbri_3 (CO_clause free* selbri_2)?) { new { label = "selbri_2", arg = expr } } | |
selbri_3 <object> = expr:(selbri_4+) { new { label = "selbri_3", arg = expr } } | |
selbri_4 <object> = expr:(selbri_5 (joik_jek selbri_5 / joik stag? KE_clause free* selbri_3 KEhE_clause? free*)*) { new { label = "selbri_4", arg = expr } } | |
selbri_5 <object> = expr:(selbri_6 ((jek / joik) stag? BO_clause free* selbri_5)?) { new { label = "selbri_5", arg = expr } } | |
selbri_6 <object> = expr:(tanru_unit (BO_clause free* selbri_6)? / NAhE_clause? free* guhek selbri gik selbri_6) { new { label = "selbri_6", arg = expr } } | |
tanru_unit <object> = expr:(tanru_unit_1 (CEI_clause free* tanru_unit_1)*) { new { label = "tanru_unit", arg = expr } } | |
tanru_unit_1 <object> = expr:(tanru_unit_2 linkargs?) { new { label = "tanru_unit_1", arg = expr } } | |
// ** zei is part of BRIVLA_clause | |
tanru_unit_2 <object> = expr:(BRIVLA_clause free* / GOhA_clause RAhO_clause? free* / KE_clause free* selbri_3 KEhE_clause? free* / ME_clause free* (sumti / lerfu_string) MEhU_clause? free* MOI_clause? free* / (number / lerfu_string) MOI_clause free* / NUhA_clause free* mex_operator / SE_clause free* tanru_unit_2 / JAI_clause free* tag? tanru_unit_2 / NAhE_clause free* tanru_unit_2 / NU_clause NAI_clause? free* (joik_jek NU_clause NAI_clause? free*)* subsentence KEI_clause? free*) { new { label = "tanru_unit_2", arg = expr } } | |
linkargs <object> = expr:(linkargs_sa* linkargs_1) { new { label = "linkargs", arg = expr } } | |
linkargs_1 <object> = expr:(BE_clause free* term links? BEhO_clause? free*) { new { label = "linkargs_1", arg = expr } } | |
linkargs_sa <object> = expr:(linkargs_start (!linkargs_start (sa_word / SA_clause !linkargs_start ) )* SA_clause &linkargs_1) { new { label = "linkargs_sa", arg = expr } } | |
linkargs_start <object> = expr:BE_clause { new { label = "linkargs_start", arg = expr } } | |
links <object> = expr:(links_sa* links_1) { new { label = "links", arg = expr } } | |
links_1 <object> = expr:(BEI_clause free* term links?) { new { label = "links_1", arg = expr } } | |
links_sa <object> = expr:(links_start (!links_start (sa_word / SA_clause !links_start ) )* SA_clause &links_1) { new { label = "links_sa", arg = expr } } | |
links_start <object> = expr:(BEI_clause) { new { label = "links_start", arg = expr } } | |
quantifier <object> = expr:(number !MOI_clause BOI_clause? free* / VEI_clause free* mex VEhO_clause? free*) { new { label = "quantifier", arg = expr } } | |
// mex = mex_1 (operator mex_1)* / rp_clause | |
mex <object> = expr:(mex_sa* mex_0) { new { label = "mex", arg = expr } } | |
mex_0 <object> = expr:(<object> mex_1 (operator mex_1)* / rp_clause) { new { label = "mex_0", arg = expr } } | |
mex_sa <object> = expr:(mex_start (!mex_start (sa_word / SA_clause !mex_start) )* SA_clause &mex_0) { new { label = "mex_sa", arg = expr } } | |
mex_start <object> = expr:(FUhA_clause / PEhO_clause / operand_start) { new { label = "mex_start", arg = expr } } | |
rp_clause <object> = expr:(FUhA_clause free* rp_expression) { new { label = "rp_clause", arg = expr } } | |
mex_1 <object> = expr:(mex_2 (BIhE_clause free* operator mex_1)?) { new { label = "mex_1", arg = expr } } | |
mex_2 <object> = expr:(operand / mex_forethought) { new { label = "mex_2", arg = expr } } | |
// This is just to make for clearer parse trees | |
mex_forethought = PEhO_clause? free* operator fore_operands KUhE_clause? free* | |
fore_operands <object> = expr:(mex_2+ ) { new { label = "fore_operands", arg = expr } } | |
//li fu'a reboi ci pi'i voboi mu pi'i su'i reboi ci vu'u su'i du li rexa | |
//rp_expression = rp_operand rp_operand operator | |
//rp_operand = operand / rp_expression | |
// AKA (almost; this one allows a single operand; above does not. | |
//rp_expression = rp_expression rp_expression operator / operand | |
// Right recursive version. | |
rp_expression <object> = expr:(operand rp_expression_tail) { new { label = "rp_expression", arg = expr } } | |
rp_expression_tail <object> = expr:(rp_expression operator rp_expression_tail / ()) { new { label = "rp_expression_tail", arg = expr } } | |
operator <object> = expr:(operator_sa* operator_0) { new { label = "operator", arg = expr } } | |
operator_0 <object> = expr:(operator_1 (joik_jek operator_1 / joik stag? KE_clause free* operator KEhE_clause? free*)*) { new { label = "operator_0", arg = expr } } | |
operator_sa <object> = expr:(operator_start (!operator_start (sa_word / SA_clause !operator_start) )* SA_clause &operator_0) { new { label = "operator_sa", arg = expr } } | |
operator_start <object> = expr:(guhek / KE_clause / SE_clause? NAhE_clause / SE_clause? MAhO_clause / SE_clause? VUhU_clause) { new { label = "operator_start", arg = expr } } | |
operator_1 <object> = expr:(operator_2 / guhek operator_1 gik operator_2 / operator_2 (jek / joik) stag? BO_clause free* operator_1) { new { label = "operator_1", arg = expr } } | |
operator_2 <object> = expr:(mex_operator / KE_clause free* operator KEhE_clause? free*) { new { label = "operator_2", arg = expr } } | |
mex_operator <object> = expr:(SE_clause free* mex_operator / NAhE_clause free* mex_operator / MAhO_clause free* mex TEhU_clause? free* / NAhU_clause free* selbri TEhU_clause? free* / VUhU_clause free*) { new { label = "mex_operator", arg = expr } } | |
operand <object> = expr:(operand_sa* operand_0) { new { label = "operand", arg = expr } } | |
operand_0 <object> = expr:(operand_1 (joik_ek stag? KE_clause free* operand KEhE_clause? free*)?) { new { label = "operand_0", arg = expr } } | |
operand_sa <object> = expr:(operand_start (!operand_start (sa_word / SA_clause !operand_start) )* SA_clause &operand_0) { new { label = "operand_sa", arg = expr } } | |
operand_start <object> = expr:(quantifier / lerfu_word / NIhE_clause / MOhE_clause / JOhI_clause / gek / LAhE_clause / NAhE_clause) { new { label = "operand_start", arg = expr } } | |
operand_1 <object> = expr:(operand_2 (joik_ek operand_2)*) { new { label = "operand_1", arg = expr } } | |
operand_2 <object> = expr:(operand_3 (joik_ek stag? BO_clause free* operand_2)?) { new { label = "operand_2", arg = expr } } | |
operand_3 <object> = expr:(quantifier / lerfu_string !MOI_clause BOI_clause? free* / NIhE_clause free* selbri TEhU_clause? free* / MOhE_clause free* sumti TEhU_clause? free* / JOhI_clause free* mex_2+ TEhU_clause? free* / gek operand gik operand_3 / (LAhE_clause free* / NAhE_clause BO_clause free*) operand LUhU_clause? free*) { new { label = "operand_3", arg = expr } } | |
number <object> = expr:(PA_clause (PA_clause / lerfu_word)*) { new { label = "number", arg = expr } } | |
lerfu_string <object> = expr:(lerfu_word (PA_clause / lerfu_word)*) { new { label = "lerfu_string", arg = expr } } | |
// ** BU clauses are part of BY_clause | |
lerfu_word <object> = expr:(BY_clause / LAU_clause lerfu_word / TEI_clause lerfu_string FOI_clause) { new { label = "lerfu_word", arg = expr } } | |
ek <object> = expr:(NA_clause? SE_clause? A_clause NAI_clause?) { new { label = "ek", arg = expr } } | |
gihek <object> = expr:(gihek_sa* gihek_1) { new { label = "gihek", arg = expr } } | |
gihek_1 <object> = expr:(NA_clause? SE_clause? GIhA_clause NAI_clause?) { new { label = "gihek_1", arg = expr } } | |
gihek_sa <object> = expr:(gihek_1 (!gihek_1 (sa_word / SA_clause !gihek_1 ) )* SA_clause &gihek) { new { label = "gihek_sa", arg = expr } } | |
jek <object> = expr:(NA_clause? SE_clause? JA_clause NAI_clause?) { new { label = "jek", arg = expr } } | |
joik <object> = expr:(<object> SE_clause? JOI_clause NAI_clause? / interval / GAhO_clause interval GAhO_clause) { new { label = "joik", arg = expr } } | |
interval <object> = expr:(SE_clause? BIhI_clause NAI_clause?) { new { label = "interval", arg = expr } } | |
joik_ek <object> = expr:(joik_ek_sa* joik_ek_1) { new { label = "joik_ek", arg = expr } } | |
joik_ek_1 <object> = expr:((joik free* / ek free*)) { new { label = "joik_ek_1", arg = expr } } | |
joik_ek_sa <object> = expr:(joik_ek_1 (!joik_ek_1 (sa_word / SA_clause !joik_ek_1 ) )* SA_clause &joik_ek) { new { label = "joik_ek_sa", arg = expr } } | |
joik_jek <object> = expr:(joik free* / jek free*) { new { label = "joik_jek", arg = expr } } | |
gek <object> = expr:(SE_clause? GA_clause NAI_clause? free* / joik GI_clause free* / stag gik) { new { label = "gek", arg = expr } } | |
guhek <object> = expr:(SE_clause? GUhA_clause NAI_clause? free*) { new { label = "guhek", arg = expr } } | |
gik <object> = expr:(GI_clause NAI_clause? free*) { new { label = "gik", arg = expr } } | |
tag <object> = expr:(tense_modal (joik_jek tense_modal)*) { new { label = "tag", arg = expr } } | |
stag <object> = expr:(simple_tense_modal ((jek / joik) simple_tense_modal)* / tense_modal (joik_jek tense_modal)*) { new { label = "stag", arg = expr } } | |
tense_modal <object> = expr:(simple_tense_modal free* / FIhO_clause free* selbri FEhU_clause? free*) { new { label = "tense_modal", arg = expr } } | |
simple_tense_modal <object> = expr:(<object> NAhE_clause? SE_clause? BAI_clause NAI_clause? KI_clause? / NAhE_clause? (<object> (<object> (time space? / space time?) CAhA_clause) / (time space? / space time?) / CAhA_clause ) KI_clause? / KI_clause / CUhE_clause) { new { label = "simple_tense_modal", arg = expr } } | |
time <object> = expr:(ZI_clause time_offset* (ZEhA_clause (PU_clause NAI_clause?)?)? interval_property* / ZI_clause? time_offset+ (ZEhA_clause (PU_clause NAI_clause?)?)? interval_property* / ZI_clause? time_offset* ZEhA_clause (PU_clause NAI_clause?)? interval_property* / ZI_clause? time_offset* (ZEhA_clause (PU_clause NAI_clause?)?)? interval_property+) { new { label = "time", arg = expr } } | |
time_offset <object> = expr:(PU_clause NAI_clause? ZI_clause?) { new { label = "time_offset", arg = expr } } | |
space <object> = expr:(VA_clause space_offset* space_interval? (MOhI_clause space_offset)? / VA_clause? space_offset+ space_interval? (MOhI_clause space_offset)? / VA_clause? space_offset* space_interval (MOhI_clause space_offset)? / VA_clause? space_offset* space_interval? MOhI_clause space_offset) { new { label = "space", arg = expr } } | |
space_offset <object> = expr:(FAhA_clause NAI_clause? VA_clause?) { new { label = "space_offset", arg = expr } } | |
space_interval <object> = expr:(<object> (VEhA_clause / VIhA_clause / VEhA_clause VIhA_clause) (FAhA_clause NAI_clause?)? space_int_props / (VEhA_clause / VIhA_clause / VEhA_clause VIhA_clause) (FAhA_clause NAI_clause?)? / space_int_props) { new { label = "space_interval", arg = expr } } | |
space_int_props <object> = expr:((FEhE_clause interval_property)+) { new { label = "space_int_props", arg = expr } } | |
interval_property <object> = expr:(number ROI_clause NAI_clause? / TAhE_clause NAI_clause? / ZAhO_clause NAI_clause?) { new { label = "interval_property", arg = expr } } | |
free <object> = expr:(<object> SEI_clause free* (terms CU_clause? free*)? selbri SEhU_clause? / SOI_clause free* sumti sumti? SEhU_clause? / vocative relative_clauses? selbri relative_clauses? DOhU_clause? / vocative relative_clauses? CMENE_clause+ free* relative_clauses? DOhU_clause? / vocative sumti? DOhU_clause? / (number / lerfu_string) MAI_clause / TO_clause text TOI_clause? / xi_clause) { new { label = "free", arg = expr } } | |
xi_clause <object> = expr:(XI_clause free* (number / lerfu_string) BOI_clause? / XI_clause free* VEI_clause free* mex VEhO_clause?) { new { label = "xi_clause", arg = expr } } | |
vocative <object> = expr:(<object> (COI_clause NAI_clause?)+ DOI_clause / (COI_clause NAI_clause?) (COI_clause NAI_clause?)* / DOI_clause) { new { label = "vocative", arg = expr } } | |
indicators <object> = expr:(FUhE_clause? indicator+) { new { label = "indicators", arg = expr } } | |
indicator <object> = expr:(<object> (UI_clause / CAI_clause) NAI_clause? / DAhO_clause / FUhO_clause) !BU_clause { new { label = "indicator", arg = expr } } | |
// **************** | |
// Magic Words | |
// **************** | |
zei_clause <object> = pre:pre_clause arg:zei_clause_no_pre { new { label = "zei_clause", pre, arg } } | |
zei_clause_no_pre <object> = expr:(pre_zei_bu (zei_tail? bu_tail)* zei_tail post_clause) { new { label = "zei_clause_no_pre", arg = expr } } | |
bu_clause <object> -memoize = pre:pre_clause arg:bu_clause_no_pre { new { label = "bu_clause", pre, arg } } | |
bu_clause_no_pre <object> -memoize = expr:(pre_zei_bu (bu_tail? zei_tail)* bu_tail post_clause) { new { label = "bu_clause_no_pre", arg = expr } } | |
zei_tail <object> = expr:(ZEI_clause any_word)+ { new { label = "zei_tail", arg = expr } } | |
bu_tail <object> = expr:BU_clause+ { new { label = "bu_tail", arg = expr } } | |
pre_zei_bu <object> -memoize = expr:(!BU_clause !ZEI_clause !SI_clause !SA_clause !SU_clause !FAhO_clause any_word_SA_handling si_clause?) { new { label = "pre_zei_bu", arg = expr } } | |
dot_star = .* | |
// __ General Morphology Issues | |
// | |
// 1. Spaces (including '.y') and UI are eaten *after* a word. | |
// | |
// 3. BAhE is eaten *before* a word. | |
// Handling of what can go after a cmavo | |
post_clause <object> = a:spaces? b:si_clause? !ZEI_clause !BU_clause c:indicators* { new { label = "post_clause", arg = a.Concat(b).Concat(c).ToArray() } } | |
pre_clause -memoize = BAhE_clause? | |
any_word_SA_handling <object> -memoize = expr:(BRIVLA_pre / known_cmavo_SA / CMAVO_pre / CMENE_pre) { new { label = "any_word_SA_handling", arg = expr } } | |
known_cmavo_SA <object> = A_pre / BAI_pre / BAhE_pre / BE_pre / BEI_pre / BEhO_pre / BIhE_pre / BIhI_pre / BO_pre / BOI_pre / BU_pre / BY_pre / CAI_pre / CAhA_pre / CEI_pre / CEhE_pre / CO_pre / COI_pre / CU_pre / CUhE_pre / DAhO_pre / DOI_pre / DOhU_pre / FA_pre / FAhA_pre / FEhE_pre / FEhU_pre / FIhO_pre / FOI_pre / FUhA_pre / FUhE_pre / FUhO_pre / GA_pre / GAhO_pre / GEhU_pre / GI_pre / GIhA_pre / GOI_pre / GOhA_pre / GUhA_pre / I_pre / JA_pre / JAI_pre / JOI_pre / JOhI_pre / KE_pre / KEI_pre / KEhE_pre / KI_pre / KOhA_pre / KU_pre / KUhE_pre / KUhO_pre / LA_pre / LAU_pre / LAhE_pre / LE_pre / LEhU_pre / LI_pre / LIhU_pre / LOhO_pre / LOhU_pre / LU_pre / LUhU_pre / MAI_pre / MAhO_pre / ME_pre / MEhU_pre / MOI_pre / MOhE_pre / MOhI_pre / NA_pre / NAI_pre / NAhE_pre / NAhU_pre / NIhE_pre / NIhO_pre / NOI_pre / NU_pre / NUhA_pre / NUhI_pre / NUhU_pre / PA_pre / PEhE_pre / PEhO_pre / PU_pre / RAhO_pre / ROI_pre / SA_pre / SE_pre / SEI_pre / SEhU_pre / SI_clause / SOI_pre / SU_pre / TAhE_pre / TEI_pre / TEhU_pre / TO_pre / TOI_pre / TUhE_pre / TUhU_pre / UI_pre / VA_pre / VAU_pre / VEI_pre / VEhA_pre / VEhO_pre / VIhA_pre / VUhO_pre / VUhU_pre / XI_pre / ZAhO_pre / ZEI_pre / ZEhA_pre / ZI_pre / ZIhE_pre / ZO_pre / ZOI_pre / ZOhU_pre | |
// Handling of spaces and things like spaces. | |
// ___ SPACE ___ | |
// SU clauses | |
su_clause <object> = pre:(erasable_clause / su_word)* arg:SU_clause { new { label = "su_clause", pre, arg } } | |
// Handling of SI and interactions with zo and lo'u...le'u | |
si_clause <object> -memoize = ((erasable_clause / si_word / SA_clause) si_clause? SI_clause)+ | |
erasable_clause <object> | |
= arg:bu_clause_no_pre !ZEI_clause !BU_clause { new { label = "erasable_clause", arg } } | |
/ arg:zei_clause_no_pre !ZEI_clause !BU_clause { new { label = "erasable_clause", arg } } | |
sa_word = pre_zei_bu | |
si_word = pre_zei_bu | |
su_word <object> = !NIhO_clause !LU_clause !TUhE_clause !TO_clause !SU_clause !FAhO_clause expr:any_word_SA_handling { expr } | |
BRIVLA_clause <object> = pre:BRIVLA_pre post:BRIVLA_post { new { label = "BRIVLA_clause", pre, post } } / arg:zei_clause { new { label = "BRIVLA_clause", arg } } | |
BRIVLA_pre <object> = pre:pre_clause arg:BRIVLA post:spaces? { new { label = "BRIVLA_pre", pre, arg, post } } | |
BRIVLA_post = post_clause | |
CMENE_clause <object> = pre:CMENE_pre post:CMENE_post { new { label = "CMENE_clause", pre, post } } | |
CMENE_pre <object> = pre:pre_clause arg:CMENE post:spaces? { new { label = "CMENE_pre", pre, arg, post } } | |
CMENE_post = post_clause | |
CMAVO_clause <object> = pre:CMAVO_pre post:CMAVO_post { new { label = "CMAVO_clause", pre, post } } | |
CMAVO_pre <object> = pre:pre_clause arg:CMAVO post:spaces? { new { label = "CMAVO_pre", pre, arg, post } } | |
CMAVO_post = post_clause | |
// eks; basic afterthought logical connectives | |
A_clause <object> = pre:A_pre post:A_post { new { label = "A_clause", pre, post } } | |
A_pre <object> = pre:pre_clause arg:A post:spaces? { new { label = "A_pre", pre, arg, post } } | |
A_post = post_clause | |
// modal operators | |
BAI_clause <object> = pre:BAI_pre post:BAI_post { new { label = "BAI_clause", pre, post } } | |
BAI_pre <object> = pre:pre_clause arg:BAI post:spaces? { new { label = "BAI_pre", pre, arg, post } } | |
BAI_post = post_clause | |
// next word intensifier | |
BAhE_clause <object> = arg:(<object> pre:BAhE_pre post:BAhE_post { new { pre, post } })+ { new { label = "BAhE_clause", arg } } | |
BAhE_pre <object> = arg:BAhE post:spaces? { new { label = "BAhE_pre", arg, post } } | |
BAhE_post <object> = expr:si_clause? !ZEI_clause !BU_clause { expr.SingleOrDefault() } | |
// sumti link to attach sumti to a selbri | |
BE_clause <object> = pre:BE_pre post:BE_post { new { label = "BE_clause", pre, post } } | |
BE_pre <object> = pre:pre_clause arg:BE post:spaces? { new { label = "BE_pre", pre, arg, post } } | |
BE_post = post_clause | |
// multiple sumti separator between BE, BEI | |
BEI_clause <object> = pre:BEI_pre post:BEI_post { new { label = "BEI_clause", pre, post } } | |
BEI_pre <object> = pre:pre_clause arg:BEI post:spaces? { new { label = "BEI_pre", pre, arg, post } } | |
BEI_post = post_clause | |
// terminates BEBEI specified descriptors | |
BEhO_clause <object> = pre:BEhO_pre post:BEhO_post { new { label = "BEhO_clause", pre, post } } | |
BEhO_pre <object> = pre:pre_clause arg:BEhO post:spaces? { new { label = "BEhO_pre", pre, arg, post } } | |
BEhO_post = post_clause | |
// prefix for high_priority MEX operator | |
BIhE_clause <object> = pre:BIhE_pre post:BIhE_post { new { label = "BIhE_clause", pre, post } } | |
BIhE_pre <object> = pre:pre_clause arg:BIhE post:spaces? { new { label = "BIhE_pre", pre, arg, post } } | |
BIhE_post = post_clause | |
// interval component of JOI | |
BIhI_clause <object> = pre:BIhI_pre post:BIhI_post { new { label = "BIhI_clause", pre, post } } | |
BIhI_pre <object> = pre:pre_clause arg:BIhI post:spaces? { new { label = "BIhI_pre", pre, arg, post } } | |
BIhI_post = post_clause | |
// joins two units with shortest scope | |
BO_clause <object> = pre:BO_pre post:BO_post { new { label = "BO_clause", pre, post } } | |
BO_pre <object> = pre:pre_clause arg:BO post:spaces? { new { label = "BO_pre", pre, arg, post } } | |
BO_post = post_clause | |
// number or lerfu_string terminator | |
BOI_clause <object> = pre:BOI_pre post:BOI_post { new { label = "BOI_clause", pre, post } } | |
BOI_pre <object> = pre:pre_clause arg:BOI post:spaces? { new { label = "BOI_pre", pre, arg, post } } | |
BOI_post = post_clause | |
// turns any word into a BY lerfu word | |
BU_clause <object> = pre:BU_pre post:BU_post { new { label = "BU_clause", pre, post } } | |
BU_pre <object> = pre:pre_clause arg:BU post:spaces? { new { label = "BU_pre", pre, arg, post } } | |
BU_post = spaces? | |
// individual lerfu words | |
BY_clause <object> = pre:BY_pre post:BY_post { new { label = "BY_clause", pre, post } } / expr:bu_clause { new { label = "BY_clause", expr } } | |
BY_pre <object> = pre:pre_clause arg:BY post:spaces? { new { label = "BY_pre", pre, arg, post } } | |
BY_post = post_clause | |
// specifies actualitypotentiality of tense | |
CAhA_clause <object> = pre:CAhA_pre post:CAhA_post { new { label = "CAhA_clause", pre, post } } | |
CAhA_pre <object> = pre:pre_clause arg:CAhA post:spaces? { new { label = "CAhA_pre", pre, arg, post } } | |
CAhA_post = post_clause | |
// afterthought intensity marker | |
CAI_clause <object> = pre:CAI_pre post:CAI_post { new { label = "CAI_clause", pre, post } } | |
CAI_pre <object> = pre:pre_clause arg:CAI post:spaces? { new { label = "CAI_pre", pre, arg, post } } | |
CAI_post = post_clause | |
// pro_bridi assignment operator | |
CEI_clause <object> = pre:CEI_pre post:CEI_post { new { label = "CEI_clause", pre, post } } | |
CEI_pre <object> = pre:pre_clause arg:CEI post:spaces? { new { label = "CEI_pre", pre, arg, post } } | |
CEI_post = post_clause | |
// afterthought term list connective | |
CEhE_clause <object> = pre:CEhE_pre post:CEhE_post { new { label = "CEhE_clause", pre, post } } | |
CEhE_pre <object> = pre:pre_clause arg:CEhE post:spaces? { new { label = "CEhE_pre", pre, arg, post } } | |
CEhE_post = post_clause | |
// names; require consonant end, then pause no | |
// LA or DOI selma'o embedded, pause before if | |
// vowel initial and preceded by a vowel | |
// tanru inversion | |
CO_clause <object> = pre:CO_pre post:CO_post { new { label = "CO_clause", pre, post } } | |
CO_pre <object> = pre:pre_clause arg:CO post:spaces? { new { label = "CO_pre", pre, arg, post } } | |
CO_post = post_clause | |
COI_clause <object> = pre:COI_pre post:COI_post { new { label = "COI_clause", pre, post } } | |
COI_pre <object> = pre:pre_clause arg:COI post:spaces? { new { label = "COI_pre", pre, arg, post } } | |
COI_post = post_clause | |
// vocative marker permitted inside names; must | |
// always be followed by pause or DOI | |
// separator between head sumti and selbri | |
CU_clause <object> = pre:CU_pre post:CU_post { new { label = "CU_clause", pre, post } } | |
CU_pre <object> = pre:pre_clause arg:CU post:spaces? { new { label = "CU_pre", pre, arg, post } } | |
CU_post = post_clause | |
// tensemodal question | |
CUhE_clause <object> = pre:CUhE_pre post:CUhE_post { new { label = "CUhE_clause", pre, post } } | |
CUhE_pre <object> = pre:pre_clause arg:CUhE post:spaces? { new { label = "CUhE_pre", pre, arg, post } } | |
CUhE_post = post_clause | |
// cancel anaphoracataphora assignments | |
DAhO_clause <object> = pre:DAhO_pre post:DAhO_post { new { label = "DAhO_clause", pre, post } } | |
DAhO_pre <object> = pre:pre_clause arg:DAhO post:spaces? { new { label = "DAhO_pre", pre, arg, post } } | |
DAhO_post = post_clause | |
// vocative marker | |
DOI_clause <object> = pre:DOI_pre post:DOI_post { new { label = "DOI_clause", pre, post } } | |
DOI_pre <object> = pre:pre_clause arg:DOI post:spaces? { new { label = "DOI_pre", pre, arg, post } } | |
DOI_post = post_clause | |
// terminator for DOI_marked vocatives | |
DOhU_clause <object> = pre:DOhU_pre post:DOhU_post { new { label = "DOhU_clause", pre, post } } | |
DOhU_pre <object> = pre:pre_clause arg:DOhU post:spaces? { new { label = "DOhU_pre", pre, arg, post } } | |
DOhU_post = post_clause | |
// modifier head generic case tag | |
FA_clause <object> = pre:FA_pre post:FA_post { new { label = "FA_clause", pre, post } } | |
FA_pre <object> = pre:pre_clause arg:FA post:spaces? { new { label = "FA_pre", pre, arg, post } } | |
FA_post = post_clause | |
// superdirections in space | |
FAhA_clause <object> = pre:FAhA_pre post:FAhA_post { new { label = "FAhA_clause", pre, post } } | |
FAhA_pre <object> = pre:pre_clause arg:FAhA post:spaces? { new { label = "FAhA_pre", pre, arg, post } } | |
FAhA_post = post_clause | |
// normally elided 'done pause' to indicate end | |
// of utterance string | |
FAhO_clause <object> = pre:pre_clause arg:FAhO post:spaces? { new { label = "FAhO_clause", pre, arg, post } } | |
// space interval mod flag | |
FEhE_clause <object> = pre:FEhE_pre post:FEhE_post { new { label = "FEhE_clause", pre, post } } | |
FEhE_pre <object> = pre:pre_clause arg:FEhE post:spaces? { new { label = "FEhE_pre", pre, arg, post } } | |
FEhE_post = post_clause | |
// ends bridi to modal conversion | |
FEhU_clause <object> = pre:FEhU_pre post:FEhU_post { new { label = "FEhU_clause", pre, post } } | |
FEhU_pre <object> = pre:pre_clause arg:FEhU post:spaces? { new { label = "FEhU_pre", pre, arg, post } } | |
FEhU_post = post_clause | |
// marks bridi to modal conversion | |
FIhO_clause <object> = pre:FIhO_pre post:FIhO_post { new { label = "FIhO_clause", pre, post } } | |
FIhO_pre <object> = pre:pre_clause arg:FIhO post:spaces? { new { label = "FIhO_pre", pre, arg, post } } | |
FIhO_post = post_clause | |
// end compound lerfu | |
FOI_clause <object> = pre:FOI_pre post:FOI_post { new { label = "FOI_clause", pre, post } } | |
FOI_pre <object> = pre:pre_clause arg:FOI post:spaces? { new { label = "FOI_pre", pre, arg, post } } | |
FOI_post = post_clause | |
// reverse Polish flag | |
FUhA_clause <object> = pre:FUhA_pre post:FUhA_post { new { label = "FUhA_clause", pre, post } } | |
FUhA_pre <object> = pre:pre_clause arg:FUhA post:spaces? { new { label = "FUhA_pre", pre, arg, post } } | |
FUhA_post = post_clause | |
// FUhA_no_SA_handling <object> = pre:pre_clause arg:FUhA post:post_clause { new { label = "FUhA_no_SA_handling", pre, arg, post } } | |
// open long scope for indicator | |
FUhE_clause <object> = pre:FUhE_pre post:FUhE_post { new { label = "FUhE_clause", pre, post } } | |
FUhE_pre <object> = pre:pre_clause arg:FUhE post:spaces? { new { label = "FUhE_pre", pre, arg, post } } | |
FUhE_post <IList<string>> = !BU_clause expr:spaces? !ZEI_clause !BU_clause { expr } | |
// FUhE_no_SA_handling <object> = pre:pre_clause arg:FUhE post:post_clause { new { label = "FUhE_no_SA_handling", pre, arg, post } } | |
// close long scope for indicator | |
FUhO_clause <object> = pre:FUhO_pre post:FUhO_post { new { label = "FUhO_clause", pre, post } } | |
FUhO_pre <object> = pre:pre_clause arg:FUhO post:spaces? { new { label = "FUhO_pre", pre, arg, post } } | |
FUhO_post = post_clause | |
// FUhO_no_SA_handling <object> = pre:pre_clause arg:FUhO post:post_clause { new { label = "FUhO_no_SA_handling", pre, arg, post } } | |
// geks; forethought logical connectives | |
GA_clause <object> = pre:GA_pre post:GA_post { new { label = "GA_clause", pre, post } } | |
GA_pre <object> = pre:pre_clause arg:GA post:spaces? { new { label = "GA_pre", pre, arg, post } } | |
GA_post = post_clause | |
// GA_no_SA_handling <object> = pre:pre_clause arg:GA post:post_clause { new { label = "GA_no_SA_handling", pre, arg, post } } | |
// openclosed interval markers for BIhI | |
GAhO_clause <object> = pre:GAhO_pre post:GAhO_post { new { label = "GAhO_clause", pre, post } } | |
GAhO_pre <object> = pre:pre_clause arg:GAhO post:spaces? { new { label = "GAhO_pre", pre, arg, post } } | |
GAhO_post = post_clause | |
// GAhO_no_SA_handling <object> = pre:pre_clause arg:GAhO post:post_clause { new { label = "GAhO_no_SA_handling", pre, arg, post } } | |
// marker ending GOI relative clauses | |
GEhU_clause <object> = pre:GEhU_pre post:GEhU_post { new { label = "GEhU_clause", pre, post } } | |
GEhU_pre <object> = pre:pre_clause arg:GEhU post:spaces? { new { label = "GEhU_pre", pre, arg, post } } | |
GEhU_post = post_clause | |
// GEhU_no_SA_handling <object> = pre:pre_clause arg:GEhU post:post_clause { new { label = "GEhU_no_SA_handling", pre, arg, post } } | |
// forethought medial marker | |
GI_clause <object> = pre:GI_pre post:GI_post { new { label = "GI_clause", pre, post } } | |
GI_pre <object> = pre:pre_clause arg:GI post:spaces? { new { label = "GI_pre", pre, arg, post } } | |
GI_post = post_clause | |
// GI_no_SA_handling <object> = pre:pre_clause arg:GI post:post_clause { new { label = "GI_no_SA_handling", pre, arg, post } } | |
// logical connectives for bridi_tails | |
GIhA_clause <object> = pre:GIhA_pre post:GIhA_post { new { label = "GIhA_clause", pre, post } } | |
GIhA_pre <object> = pre:pre_clause arg:GIhA post:spaces? { new { label = "GIhA_pre", pre, arg, post } } | |
GIhA_post = post_clause | |
// GIhA_no_SA_handling <object> = pre:pre_clause arg:GIhA post:post_clause { new { label = "GIhA_no_SA_handling", pre, arg, post } } | |
// attaches a sumti modifier to a sumti | |
GOI_clause <object> = pre:GOI_pre post:GOI_post { new { label = "GOI_clause", pre, post } } | |
GOI_pre <object> = pre:pre_clause arg:GOI post:spaces? { new { label = "GOI_pre", pre, arg, post } } | |
GOI_post = post_clause | |
// GOI_no_SA_handling <object> = pre:pre_clause arg:GOI post:post_clause { new { label = "GOI_no_SA_handling", pre, arg, post } } | |
// pro_bridi | |
GOhA_clause <object> = pre:GOhA_pre post:GOhA_post { new { label = "GOhA_clause", pre, post } } | |
GOhA_pre <object> = pre:pre_clause arg:GOhA post:spaces? { new { label = "GOhA_pre", pre, arg, post } } | |
GOhA_post = post_clause | |
// GOhA_no_SA_handling <object> = pre:pre_clause arg:GOhA post:post_clause { new { label = "GOhA_no_SA_handling", pre, arg, post } } | |
// GEK for tanru units, corresponds to JEKs | |
GUhA_clause <object> = pre:GUhA_pre post:GUhA_post { new { label = "GUhA_clause", pre, post } } | |
GUhA_pre <object> = pre:pre_clause arg:GUhA post:spaces? { new { label = "GUhA_pre", pre, arg, post } } | |
GUhA_post = post_clause | |
// GUhA_no_SA_handling <object> = pre:pre_clause arg:GUhA post:post_clause { new { label = "GUhA_no_SA_handling", pre, arg, post } } | |
// sentence link | |
I_clause <object> = expr:(sentence_sa* I_pre I_post) { new { label = "I_clause", arg = expr } } | |
I_pre <object> = pre:pre_clause arg:I post:spaces? { new { label = "I_pre", pre, arg, post } } | |
I_post = post_clause | |
// I_no_SA_handling <object> = pre:pre_clause arg:I post:post_clause { new { label = "I_no_SA_handling", pre, arg, post } } | |
// jeks; logical connectives within tanru | |
JA_clause <object> = pre:JA_pre post:JA_post { new { label = "JA_clause", pre, post } } | |
JA_pre <object> = pre:pre_clause arg:JA post:spaces? { new { label = "JA_pre", pre, arg, post } } | |
JA_post = post_clause | |
// JA_no_SA_handling <object> = pre:pre_clause arg:JA post:post_clause { new { label = "JA_no_SA_handling", pre, arg, post } } | |
// modal conversion flag | |
JAI_clause <object> = pre:JAI_pre post:JAI_post { new { label = "JAI_clause", pre, post } } | |
JAI_pre <object> = pre:pre_clause arg:JAI post:spaces? { new { label = "JAI_pre", pre, arg, post } } | |
JAI_post = post_clause | |
// JAI_no_SA_handling <object> = pre:pre_clause arg:JAI post:post_clause { new { label = "JAI_no_SA_handling", pre, arg, post } } | |
// flags an array operand | |
JOhI_clause <object> = pre:JOhI_pre post:JOhI_post { new { label = "JOhI_clause", pre, post } } | |
JOhI_pre <object> = pre:pre_clause arg:JOhI post:spaces? { new { label = "JOhI_pre", pre, arg, post } } | |
JOhI_post = post_clause | |
// JOhI_no_SA_handling <object> = pre:pre_clause arg:JOhI post:post_clause { new { label = "JOhI_no_SA_handling", pre, arg, post } } | |
// non_logical connectives | |
JOI_clause <object> = pre:JOI_pre post:JOI_post { new { label = "JOI_clause", pre, post } } | |
JOI_pre <object> = pre:pre_clause arg:JOI post:spaces? { new { label = "JOI_pre", pre, arg, post } } | |
JOI_post = post_clause | |
// JOI_no_SA_handling <object> = pre:pre_clause arg:JOI post:post_clause { new { label = "JOI_no_SA_handling", pre, arg, post } } | |
// left long scope marker | |
KE_clause <object> = pre:KE_pre post:KE_post { new { label = "KE_clause", pre, post } } | |
KE_pre <object> = pre:pre_clause arg:KE post:spaces? { new { label = "KE_pre", pre, arg, post } } | |
KE_post = post_clause | |
// KE_no_SA_handling <object> = pre:pre_clause arg:KE post:post_clause { new { label = "KE_no_SA_handling", pre, arg, post } } | |
// right terminator for KE groups | |
KEhE_clause <object> = pre:KEhE_pre post:KEhE_post { new { label = "KEhE_clause", pre, post } } | |
KEhE_pre <object> = pre:pre_clause arg:KEhE post:spaces? { new { label = "KEhE_pre", pre, arg, post } } | |
KEhE_post = post_clause | |
// KEhE_no_SA_handling <object> = pre:pre_clause arg:KEhE post:post_clause { new { label = "KEhE_no_SA_handling", pre, arg, post } } | |
// right terminator, NU abstractions | |
KEI_clause <object> = pre:KEI_pre post:KEI_post { new { label = "KEI_clause", pre, post } } | |
KEI_pre <object> = pre:pre_clause arg:KEI post:spaces? { new { label = "KEI_pre", pre, arg, post } } | |
KEI_post = post_clause | |
KEI_no_SA_handling <object> = pre:pre_clause arg:KEI post:post_clause { new { label = "KEI_no_SA_handling", pre, arg, post } } | |
// multiple utterance scope for tenses | |
KI_clause <object> = pre:KI_pre post:KI_post { new { label = "KI_clause", pre, post } } | |
KI_pre <object> = pre:pre_clause arg:KI post:spaces? { new { label = "KI_pre", pre, arg, post } } | |
KI_post = post_clause | |
// KI_no_SA_handling <object> = pre:pre_clause arg:KI post:post_clause { new { label = "KI_no_SA_handling", pre, arg, post } } | |
// sumti anaphora | |
KOhA_clause <object> = pre:KOhA_pre post:KOhA_post { new { label = "KOhA_clause", pre, post } } | |
KOhA_pre <object> = pre:pre_clause arg:KOhA post:spaces? { new { label = "KOhA_pre", pre, arg, post } } | |
KOhA_post = post_clause | |
// KOhA_no_SA_handling <object> = pre:pre_clause arg:KOhA post:spaces? { new { label = "KOhA_no_SA_handling", pre, arg, post } } | |
// right terminator for descriptions, etc. | |
KU_clause <object> = pre:KU_pre post:KU_post { new { label = "KU_clause", pre, post } } | |
KU_pre <object> = pre:pre_clause arg:KU post:spaces? { new { label = "KU_pre", pre, arg, post } } | |
KU_post = post_clause | |
// KU_no_SA_handling <object> = pre:pre_clause arg:KU post:post_clause { new { label = "KU_no_SA_handling", pre, arg, post } } | |
// MEX forethought delimiter | |
KUhE_clause <object> = pre:KUhE_pre post:KUhE_post { new { label = "KUhE_clause", pre, post } } | |
KUhE_pre <object> = pre:pre_clause arg:KUhE post:spaces? { new { label = "KUhE_pre", pre, arg, post } } | |
KUhE_post = post_clause | |
// KUhE_no_SA_handling <object> = pre:pre_clause arg:KUhE post:post_clause { new { label = "KUhE_no_SA_handling", pre, arg, post } } | |
// right terminator, NOI relative clauses | |
KUhO_clause <object> = pre:KUhO_pre post:KUhO_post { new { label = "KUhO_clause", pre, post } } | |
KUhO_pre <object> = pre:pre_clause arg:KUhO post:spaces? { new { label = "KUhO_pre", pre, arg, post } } | |
KUhO_post = post_clause | |
// KUhO_no_SA_handling <object> = pre:pre_clause arg:KUhO post:post_clause { new { label = "KUhO_no_SA_handling", pre, arg, post } } | |
// name descriptors | |
LA_clause <object> = pre:LA_pre post:LA_post { new { label = "LA_clause", pre, post } } | |
LA_pre <object> = pre:pre_clause arg:LA post:spaces? { new { label = "LA_pre", pre, arg, post } } | |
LA_post = post_clause | |
// LA_no_SA_handling <object> = pre:pre_clause arg:LA post:post_clause { new { label = "LA_no_SA_handling", pre, arg, post } } | |
// lerfu prefixes | |
LAU_clause <object> = pre:LAU_pre post:LAU_post { new { label = "LAU_clause", pre, post } } | |
LAU_pre <object> = pre:pre_clause arg:LAU post:spaces? { new { label = "LAU_pre", pre, arg, post } } | |
LAU_post = post_clause | |
// LAU_no_SA_handling <object> = pre:pre_clause arg:LAU post:post_clause { new { label = "LAU_no_SA_handling", pre, arg, post } } | |
// sumti qualifiers | |
LAhE_clause <object> = pre:LAhE_pre post:LAhE_post { new { label = "LAhE_clause", pre, post } } | |
LAhE_pre <object> = pre:pre_clause arg:LAhE post:spaces? { new { label = "LAhE_pre", pre, arg, post } } | |
LAhE_post = post_clause | |
// LAhE_no_SA_handling <object> = pre:pre_clause arg:LAhE post:post_clause { new { label = "LAhE_no_SA_handling", pre, arg, post } } | |
// sumti descriptors | |
LE_clause <object> = pre:LE_pre post:LE_post { new { label = "LE_clause", pre, post } } | |
LE_pre <object> = pre:pre_clause arg:LE post:spaces? { new { label = "LE_pre", pre, arg, post } } | |
LE_post = post_clause | |
// LE_no_SA_handling <object> = pre:pre_clause arg:LE post:post_clause { new { label = "LE_no_SA_handling", pre, arg, post } } | |
// possibly ungrammatical text right quote | |
LEhU_clause <object> = pre:LEhU_pre post:LEhU_post { new { label = "LEhU_clause", pre, post } } | |
LEhU_pre <object> = pre:pre_clause arg:LEhU post:spaces? { new { label = "LEhU_pre", pre, arg, post } } | |
LEhU_post = spaces? | |
// LEhU_clause_no_SA = LEhU_pre_no_SA LEhU_post | |
// LEhU_pre_no_SA = pre_clause LEhU spaces? | |
// LEhU_no_SA_handling <object> = pre:pre_clause arg:LEhU post:post_clause { new { label = "LEhU_no_SA_handling", pre, arg, post } } | |
// convert number to sumti | |
LI_clause <object> = pre:LI_pre post:LI_post { new { label = "LI_clause", pre, post } } | |
LI_pre <object> = pre:pre_clause arg:LI post:spaces? { new { label = "LI_pre", pre, arg, post } } | |
LI_post = post_clause | |
// LI_no_SA_handling <object> = pre:pre_clause arg:LI post:post_clause { new { label = "LI_no_SA_handling", pre, arg, post } } | |
// grammatical text right quote | |
LIhU_clause <object> = pre:LIhU_pre post:LIhU_post { new { label = "LIhU_clause", pre, post } } | |
LIhU_pre <object> = pre:pre_clause arg:LIhU post:spaces? { new { label = "LIhU_pre", pre, arg, post } } | |
LIhU_post = post_clause | |
// LIhU_no_SA_handling <object> = pre:pre_clause arg:LIhU post:post_clause { new { label = "LIhU_no_SA_handling", pre, arg, post } } | |
// elidable terminator for LI | |
LOhO_clause <object> = pre:LOhO_pre post:LOhO_post { new { label = "LOhO_clause", pre, post } } | |
LOhO_pre <object> = pre:pre_clause arg:LOhO post:spaces? { new { label = "LOhO_pre", pre, arg, post } } | |
LOhO_post = post_clause | |
// LOhO_no_SA_handling <object> = pre:pre_clause arg:LOhO post:post_clause { new { label = "LOhO_no_SA_handling", pre, arg, post } } | |
// possibly ungrammatical text left quote | |
LOhU_clause <object> = pre:LOhU_pre post:LOhU_post { new { label = "LOhU_clause", pre, post } } | |
LOhU_pre <object> = pre:pre_clause arg:LOhU post:spaces? words:(<object> !LEhU word:any_word { word })* close:LEhU_clause after:spaces? { new { label = "LOhU_pre", pre, arg, post, value = new { words, close, after } } } | |
LOhU_post = post_clause | |
// LOhU_no_SA_handling <object> = pre:pre_clause arg:LOhU post:spaces? words:(<object> !LEhU word:any_word { word })* close:LEhU_clause after:spaces? { new { label = "LOhU_no_SA_handling", pre, arg, post, value = new { words, close, after } } } | |
// grammatical text left quote | |
LU_clause <object> = pre:LU_pre post:LU_post { new { label = "LU_clause", pre, post } } | |
LU_pre <object> = pre:pre_clause arg:LU post:spaces? { new { label = "LU_pre", pre, arg, post } } | |
LU_post = post_clause | |
// LU_no_SA_handling <object> = pre:pre_clause arg:LU post:post_clause { new { label = "LU_no_SA_handling", pre, arg, post } } | |
// LAhE close delimiter | |
LUhU_clause <object> = pre:LUhU_pre post:LUhU_post { new { label = "LUhU_clause", pre, post } } | |
LUhU_pre <object> = pre:pre_clause arg:LUhU post:spaces? { new { label = "LUhU_pre", pre, arg, post } } | |
LUhU_post = post_clause | |
// LUhU_no_SA_handling <object> = pre:pre_clause arg:LUhU post:post_clause { new { label = "LUhU_no_SA_handling", pre, arg, post } } | |
// change MEX expressions to MEX operators | |
MAhO_clause <object> = pre:MAhO_pre post:MAhO_post { new { label = "MAhO_clause", pre, post } } | |
MAhO_pre <object> = pre:pre_clause arg:MAhO post:spaces? { new { label = "MAhO_pre", pre, arg, post } } | |
MAhO_post = post_clause | |
// MAhO_no_SA_handling <object> = pre:pre_clause arg:MAhO post:post_clause { new { label = "MAhO_no_SA_handling", pre, arg, post } } | |
// change numbers to utterance ordinals | |
MAI_clause <object> = pre:MAI_pre post:MAI_post { new { label = "MAI_clause", pre, post } } | |
MAI_pre <object> = pre:pre_clause arg:MAI post:spaces? { new { label = "MAI_pre", pre, arg, post } } | |
MAI_post = post_clause | |
// MAI_no_SA_handling <object> = pre:pre_clause arg:MAI post:post_clause { new { label = "MAI_no_SA_handling", pre, arg, post } } | |
// converts a sumti into a tanru_unit | |
ME_clause <object> = pre:ME_pre post:ME_post { new { label = "ME_clause", pre, post } } | |
ME_pre <object> = pre:pre_clause arg:ME post:spaces? { new { label = "ME_pre", pre, arg, post } } | |
ME_post = post_clause | |
// ME_no_SA_handling <object> = pre:pre_clause arg:ME post:post_clause { new { label = "ME_no_SA_handling", pre, arg, post } } | |
// terminator for ME | |
MEhU_clause <object> = pre:MEhU_pre post:MEhU_post { new { label = "MEhU_clause", pre, post } } | |
MEhU_pre <object> = pre:pre_clause arg:MEhU post:spaces? { new { label = "MEhU_pre", pre, arg, post } } | |
MEhU_post = post_clause | |
// MEhU_no_SA_handling <object> = pre:pre_clause arg:MEhU post:post_clause { new { label = "MEhU_no_SA_handling", pre, arg, post } } | |
// change sumti to operand, inverse of LI | |
MOhE_clause <object> = pre:MOhE_pre post:MOhE_post { new { label = "MOhE_clause", pre, post } } | |
MOhE_pre <object> = pre:pre_clause arg:MOhE post:spaces? { new { label = "MOhE_pre", pre, arg, post } } | |
MOhE_post = post_clause | |
// MOhE_no_SA_handling <object> = pre:pre_clause arg:MOhE post:post_clause { new { label = "MOhE_no_SA_handling", pre, arg, post } } | |
// motion tense marker | |
MOhI_clause <object> = pre:MOhI_pre post:MOhI_post { new { label = "MOhI_clause", pre, post } } | |
MOhI_pre <object> = pre:pre_clause arg:MOhI post:spaces? { new { label = "MOhI_pre", pre, arg, post } } | |
MOhI_post = post_clause | |
// MOhI_no_SA_handling <object> = pre:pre_clause arg:MOhI post:post_clause { new { label = "MOhI_no_SA_handling", pre, arg, post } } | |
// change number to selbri | |
MOI_clause <object> = pre:MOI_pre post:MOI_post { new { label = "MOI_clause", pre, post } } | |
MOI_pre <object> = pre:pre_clause arg:MOI post:spaces? { new { label = "MOI_pre", pre, arg, post } } | |
MOI_post = post_clause | |
// MOI_no_SA_handling <object> = pre:pre_clause arg:MOI post:post_clause { new { label = "MOI_no_SA_handling", pre, arg, post } } | |
// bridi negation | |
NA_clause <object> = pre:NA_pre post:NA_post { new { label = "NA_clause", pre, post } } | |
NA_pre <object> = pre:pre_clause arg:NA post:spaces? { new { label = "NA_pre", pre, arg, post } } | |
NA_post = post_clause | |
// NA_no_SA_handling <object> = pre:pre_clause arg:NA post:post_clause { new { label = "NA_no_SA_handling", pre, arg, post } } | |
// attached to words to negate them | |
NAI_clause <object> = pre:NAI_pre post:NAI_post { new { label = "NAI_clause", pre, post } } | |
NAI_pre <object> = pre:pre_clause arg:NAI post:spaces? { new { label = "NAI_pre", pre, arg, post } } | |
NAI_post = post_clause | |
// NAI_no_SA_handling <object> = pre:pre_clause arg:NAI post:post_clause { new { label = "NAI_no_SA_handling", pre, arg, post } } | |
// scalar negation | |
NAhE_clause <object> = pre:NAhE_pre post:NAhE_post { new { label = "NAhE_clause", pre, post } } | |
NAhE_pre <object> = pre:pre_clause arg:NAhE post:spaces? { new { label = "NAhE_pre", pre, arg, post } } | |
NAhE_post = post_clause | |
// NAhE_no_SA_handling <object> = pre:pre_clause arg:NAhE post:post_clause { new { label = "NAhE_no_SA_handling", pre, arg, post } } | |
// change a selbri into an operator | |
NAhU_clause <object> = pre:NAhU_pre post:NAhU_post { new { label = "NAhU_clause", pre, post } } | |
NAhU_pre <object> = pre:pre_clause arg:NAhU post:spaces? { new { label = "NAhU_pre", pre, arg, post } } | |
NAhU_post = post_clause | |
// NAhU_no_SA_handling <object> = pre:pre_clause arg:NAhU post:post_clause { new { label = "NAhU_no_SA_handling", pre, arg, post } } | |
// change selbri to operand; inverse of MOI | |
NIhE_clause <object> = pre:NIhE_pre post:NIhE_post { new { label = "NIhE_clause", pre, post } } | |
NIhE_pre <object> = pre:pre_clause arg:NIhE post:spaces? { new { label = "NIhE_pre", pre, arg, post } } | |
NIhE_post = post_clause | |
// NIhE_no_SA_handling <object> = pre:pre_clause arg:NIhE post:post_clause { new { label = "NIhE_no_SA_handling", pre, arg, post } } | |
// new paragraph; change of subject | |
NIhO_clause <object> = expr:(sentence_sa* NIhO_pre NIhO_post) { new { label = "NIhO_clause", arg = expr } } | |
NIhO_pre <object> = pre:pre_clause arg:NIhO post:spaces? { new { label = "NIhO_pre", pre, arg, post } } | |
NIhO_post = su_clause* post_clause | |
// NIhO_no_SA_handling = pre_clause NIhO su_clause* post_clause | |
// attaches a subordinate clause to a sumti | |
NOI_clause <object> = pre:NOI_pre post:NOI_post { new { label = "NOI_clause", pre, post } } | |
NOI_pre <object> = pre:pre_clause arg:NOI post:spaces? { new { label = "NOI_pre", pre, arg, post } } | |
NOI_post = post_clause | |
// NOI_no_SA_handling <object> = pre:pre_clause arg:NOI post:post_clause { new { label = "NOI_no_SA_handling", pre, arg, post } } | |
// abstraction | |
NU_clause <object> = pre:NU_pre post:NU_post { new { label = "NU_clause", pre, post } } | |
NU_pre <object> = pre:pre_clause arg:NU post:spaces? { new { label = "NU_pre", pre, arg, post } } | |
NU_post = post_clause | |
// NU_no_SA_handling <object> = pre:pre_clause arg:NU post:post_clause { new { label = "NU_no_SA_handling", pre, arg, post } } | |
// change operator to selbri; inverse of MOhE | |
NUhA_clause <object> = pre:NUhA_pre post:NUhA_post { new { label = "NUhA_clause", pre, post } } | |
NUhA_pre <object> = pre:pre_clause arg:NUhA post:spaces? { new { label = "NUhA_pre", pre, arg, post } } | |
NUhA_post = post_clause | |
// NUhA_no_SA_handling <object> = pre:pre_clause arg:NUhA post:post_clause { new { label = "NUhA_no_SA_handling", pre, arg, post } } | |
// marks the start of a termset | |
NUhI_clause <object> = pre:NUhI_pre post:NUhI_post { new { label = "NUhI_clause", pre, post } } | |
NUhI_pre <object> = pre:pre_clause arg:NUhI post:spaces? { new { label = "NUhI_pre", pre, arg, post } } | |
NUhI_post = post_clause | |
// NUhI_no_SA_handling <object> = pre:pre_clause arg:NUhI post:post_clause { new { label = "NUhI_no_SA_handling", pre, arg, post } } | |
// marks the middle and end of a termset | |
NUhU_clause <object> = pre:NUhU_pre post:NUhU_post { new { label = "NUhU_clause", pre, post } } | |
NUhU_pre <object> = pre:pre_clause arg:NUhU post:spaces? { new { label = "NUhU_pre", pre, arg, post } } | |
NUhU_post = post_clause | |
// NUhU_no_SA_handling <object> = pre:pre_clause arg:NUhU post:post_clause { new { label = "NUhU_no_SA_handling", pre, arg, post } } | |
// numbers and numeric punctuation | |
PA_clause <object> -memoize = pre:PA_pre post:PA_post { new { label = "PA_clause", pre, post } } | |
PA_pre <object> = pre:pre_clause arg:PA post:spaces? { new { label = "PA_pre", pre, arg, post } } | |
PA_post = post_clause | |
// PA_no_SA_handling <object> = pre:pre_clause arg:PA post:post_clause { new { label = "PA_no_SA_handling", pre, arg, post } } | |
// afterthought termset connective prefix | |
PEhE_clause <object> = pre:PEhE_pre post:PEhE_post { new { label = "PEhE_clause", pre, post } } | |
PEhE_pre <object> = pre:pre_clause arg:PEhE post:spaces? { new { label = "PEhE_pre", pre, arg, post } } | |
PEhE_post = post_clause | |
// PEhE_no_SA_handling <object> = pre:pre_clause arg:PEhE post:post_clause { new { label = "PEhE_no_SA_handling", pre, arg, post } } | |
// forethought (Polish) flag | |
PEhO_clause <object> = pre:PEhO_pre post:PEhO_post { new { label = "PEhO_clause", pre, post } } | |
PEhO_pre <object> = pre:pre_clause arg:PEhO post:spaces? { new { label = "PEhO_pre", pre, arg, post } } | |
PEhO_post = post_clause | |
// PEhO_no_SA_handling <object> = pre:pre_clause arg:PEhO post:post_clause { new { label = "PEhO_no_SA_handling", pre, arg, post } } | |
// directions in time | |
PU_clause <object> = pre:PU_pre post:PU_post { new { label = "PA_clause", pre, post } } | |
PU_pre <object> = pre:pre_clause arg:PU post:spaces? { new { label = "PU_pre", pre, arg, post } } | |
PU_post = post_clause | |
// PU_no_SA_handling <object> = pre:pre_clause arg:PU post:post_clause { new { label = "PU_no_SA_handling", pre, arg, post } } | |
// flag for modified interpretation of GOhI | |
RAhO_clause <object> = pre:RAhO_pre post:RAhO_post { new { label = "RAhO_clause", pre, post } } | |
RAhO_pre <object> = pre:pre_clause arg:RAhO post:spaces? { new { label = "RAhO_pre", pre, arg, post } } | |
RAhO_post = post_clause | |
// RAhO_no_SA_handling <object> = pre:pre_clause arg:RAhO post:post_clause { new { label = "RAhO_no_SA_handling", pre, arg, post } } | |
// converts number to extensional tense | |
ROI_clause <object> = pre:ROI_pre post:ROI_post { new { label = "ROI_clause", pre, post } } | |
ROI_pre <object> = pre:pre_clause arg:ROI post:spaces? { new { label = "ROI_pre", pre, arg, post } } | |
ROI_post = post_clause | |
// ROI_no_SA_handling <object> = pre:pre_clause arg:ROI post:post_clause { new { label = "ROI_no_SA_handling", pre, arg, post } } | |
SA_clause <object> = pre:SA_pre post:SA_post { new { label = "SA_clause", pre, post } } | |
SA_pre <object> = pre:pre_clause arg:SA post:spaces? { new { label = "SA_pre", pre, arg, post } } | |
SA_post = spaces? | |
// metalinguistic eraser to the beginning of | |
// the current utterance | |
// conversions | |
SE_clause <object> = pre:SE_pre post:SE_post { new { label = "SE_clause", pre, post } } | |
SE_pre <object> = pre:pre_clause arg:SE post:spaces? { new { label = "SE_pre", pre, arg, post } } | |
SE_post = post_clause | |
// SE_no_SA_handling <object> = pre:pre_clause arg:SE post:post_clause { new { label = "SE_no_SA_handling", pre, arg, post } } | |
// metalinguistic bridi insert marker | |
SEI_clause <object> = pre:SEI_pre post:SEI_post { new { label = "SEI_clause", pre, post } } | |
SEI_pre <object> = pre:pre_clause arg:SEI post:spaces? { new { label = "SEI_pre", pre, arg, post } } | |
SEI_post = post_clause | |
// SEI_no_SA_handling <object> = pre:pre_clause arg:SEI post:post_clause { new { label = "SEI_no_SA_handling", pre, arg, post } } | |
// metalinguistic bridi end marker | |
SEhU_clause <object> = pre:SEhU_pre post:SEhU_post { new { label = "SEhU_clause", pre, post } } | |
SEhU_pre <object> = pre:pre_clause arg:SEhU post:spaces? { new { label = "SEhU_pre", pre, arg, post } } | |
SEhU_post = post_clause | |
// SEhU_no_SA_handling <object> = pre:pre_clause arg:SEhU post:post_clause { new { label = "SEhU_no_SA_handling", pre, arg, post } } | |
// metalinguistic single word eraser | |
SI_clause <object> = pre:spaces? arg:SI post:spaces? { new { label = "SI_clause", pre, arg, post } } | |
// reciprocal sumti marker | |
SOI_clause <object> = pre:SOI_pre post:SOI_post { new { label = "SOI_clause", arg = pre, post } } | |
SOI_pre <object> = pre:pre_clause arg:SOI post:spaces? { new { label = "SOI_pre", pre, arg, post } } | |
SOI_post = post_clause | |
// SOI_no_SA_handling <object> = pre:pre_clause arg:SOI post:post_clause { new { label = "SOI_no_SA_handling", pre, arg, post } } | |
// metalinguistic eraser of the entire text | |
SU_clause <object> = pre:SU_pre post:SU_post { new { label = "SU_clause", arg = pre, post } } | |
SU_pre <object> = pre:pre_clause arg:SU post:spaces? { new { label = "SU_pre", pre, arg, post } } | |
SU_post = post_clause | |
// tense interval properties | |
TAhE_clause <object> = pre:TAhE_pre post:TAhE_post { new { label = "TAhE_clause", pre, post } } | |
TAhE_pre <object> = pre:pre_clause arg:TAhE post:spaces? { new { label = "TAhE_pre", pre, arg, post } } | |
TAhE_post = post_clause | |
// TAhE_no_SA_handling <object> = pre:pre_clause arg:TAhE post:post_clause { new { label = "TAhE_no_SA_handling", pre, arg, post } } | |
// closing gap for MEX constructs | |
TEhU_clause <object> = pre:TEhU_pre post:TEhU_post { new { label = "TEhU_clause", arg = pre, post } } | |
TEhU_pre <object> = pre:pre_clause arg:TEhU post:spaces? { new { label = "TEhU_pre", pre, arg, post } } | |
TEhU_post = post_clause | |
// TEhU_no_SA_handling <object> = pre:pre_clause arg:TEhU post:post_clause { new { label = "TEhU_no_SA_handling", pre, arg, post } } | |
// start compound lerfu | |
TEI_clause <object> = pre:TEI_pre post:TEI_post { new { label = "TEI_clause", pre, post } } | |
TEI_pre <object> = pre:pre_clause arg:TEI post:spaces? { new { label = "TEI_pre", pre, arg, post } } | |
TEI_post = post_clause | |
// TEI_no_SA_handling <object> = pre:pre_clause arg:TEI post:post_clause { new { label = "TEI_no_SA_handling", pre, arg, post } } | |
// left discursive parenthesis | |
TO_clause <object> = pre:TO_pre post:TO_post { new { label = "TO_clause", arg = pre, post } } | |
TO_pre <object> = pre:pre_clause arg:TO post:spaces? { new { label = "TO_pre", pre, arg, post } } | |
TO_post = post_clause | |
// TO_no_SA_handling <object> = pre:pre_clause arg:TO post:post_clause { new { label = "TO_no_SA_handling", pre, arg, post } } | |
// right discursive parenthesis | |
TOI_clause <object> = pre:TOI_pre post:TOI_post { new { label = "TOI_clause", arg = pre, post } } | |
TOI_pre <object> = pre:pre_clause arg:TOI post:spaces? { new { label = "TOI_pre", pre, arg, post } } | |
TOI_post = post_clause | |
// TOI_no_SA_handling <object> = pre:pre_clause arg:TOI post:post_clause { new { label = "TOI_no_SA_handling", pre, arg, post } } | |
// multiple utterance scope mark | |
TUhE_clause <object> = pre:TUhE_pre post:TUhE_post { new { label = "TUhE_clause", arg = pre, post } } | |
TUhE_pre <object> = pre:pre_clause arg:TUhE post:spaces? { new { label = "TUhE_pre", pre, arg, post } } | |
TUhE_post = su_clause* post_clause | |
// TUhE_no_SA_handling = pre_clause TUhE su_clause* post_clause | |
// multiple utterance end scope mark | |
TUhU_clause <object> = pre:TUhU_pre post:TUhU_post { new { label = "TUhU_clause", arg = pre, post } } | |
TUhU_pre <object> = pre:pre_clause arg:TUhU post:spaces? { new { label = "TUhU_pre", pre, arg, post } } | |
TUhU_post = post_clause | |
// TUhU_no_SA_handling <object> = pre:pre_clause arg:TUhU post:post_clause { new { label = "TUhU_no_SA_handling", pre, arg, post } } | |
// attitudinals, observationals, discursives | |
UI_clause <object> = pre:UI_pre post:UI_post { new { label = "UI_clause", pre, post } } | |
UI_pre <object> = pre:pre_clause arg:UI post:spaces? { new { label = "UI_pre", pre, arg, post } } | |
UI_post = post_clause | |
// UI_no_SA_handling <object> = pre:pre_clause arg:UI post:post_clause { new { label = "UI_no_SA_handling", pre, arg, post } } | |
// distance in space_time | |
VA_clause <object> = pre:VA_pre post:VA_post { new { label = "VA_clause", arg = pre, post } } | |
VA_pre <object> = pre:pre_clause arg:VA post:spaces? { new { label = "VA_pre", pre, arg, post } } | |
VA_post = post_clause | |
// VA_no_SA_handling <object> = pre:pre_clause arg:VA post:post_clause { new { label = "VA_no_SA_handling", pre, arg, post } } | |
// end simple bridi or bridi_tail | |
VAU_clause <object> = pre:VAU_pre post:VAU_post { new { label = "VAU_clause", arg = pre, post } } | |
VAU_pre <object> = pre:pre_clause arg:VAU post:spaces? { new { label = "VAU_pre", pre, arg, post } } | |
VAU_post = post_clause | |
// VAU_no_SA_handling <object> = pre:pre_clause arg:VAU post:post_clause { new { label = "VAU_no_SA_handling", pre, arg, post } } | |
// left MEX bracket | |
VEI_clause <object> = pre:VEI_pre post:VEI_post { new { label = "VEI_clause", arg = pre, post } } | |
VEI_pre <object> = pre:pre_clause arg:VEI post:spaces? { new { label = "VEI_pre", pre, arg, post } } | |
VEI_post = post_clause | |
// VEI_no_SA_handling <object> = pre:pre_clause arg:VEI post:post_clause { new { label = "VEI_no_SA_handling", pre, arg, post } } | |
// right MEX bracket | |
VEhO_clause <object> = pre:VEhO_pre post:VEhO_post { new { label = "VEhO_clause", arg = pre, post } } | |
VEhO_pre <object> = pre:pre_clause arg:VEhO post:spaces? { new { label = "VEhO_pre", pre, arg, post } } | |
VEhO_post = post_clause | |
// VEhO_no_SA_handling <object> = pre:pre_clause arg:VEhO post:post_clause { new { label = "VEhO_no_SA_handling", pre, arg, post } } | |
// MEX operator | |
VUhU_clause <object> = pre:VUhU_pre post:VUhU_post { new { label = "VUhU_clause", pre, post } } | |
VUhU_pre <object> = pre:pre_clause arg:VUhU post:spaces? { new { label = "VUhU_pre", pre, arg, post } } | |
VUhU_post = post_clause | |
// VUhU_no_SA_handling <object> = pre:pre_clause arg:VUhU post:post_clause { new { label = "VUhU_no_SA_handling", pre, arg, post } } | |
// space_time interval size | |
VEhA_clause <object> = pre:VEhA_pre post:VEhA_post { new { label = "VEhA_clause", pre, post } } | |
VEhA_pre <object> = pre:pre_clause arg:VEhA post:spaces? { new { label = "VEhA_pre", pre, arg, post } } | |
VEhA_post = post_clause | |
// VEhA_no_SA_handling <object> = pre:pre_clause arg:VEhA post:post_clause { new { label = "VEhA_no_SA_handling", pre, arg, post } } | |
// space_time dimensionality marker | |
VIhA_clause <object> = pre:VIhA_pre post:VIhA_post { new { label = "VIhA_clause", pre, post } } | |
VIhA_pre <object> = pre:pre_clause arg:VIhA post:spaces? { new { label = "VIhA_pre", pre, arg, post } } | |
VIhA_post = post_clause | |
// VIhA_no_SA_handling <object> = pre:pre_clause arg:VIhA post:post_clause { new { label = "VIhA_no_SA_handling", pre, arg, post } } | |
VUhO_clause <object> = pre:VUhO_pre post:VUhO_post { new { label = "VUhO_clause", pre, post } } | |
VUhO_pre <object> = pre:pre_clause arg:VUhO post:spaces? { new { label = "VUhO_pre", pre, arg, post } } | |
VUhO_post = post_clause | |
// VUhO_no_SA_handling <object> = pre:pre_clause arg:VUhO post:post_clause { new { label = "VUhO_no_SA_handling", pre, arg, post } } | |
// glue between logically connected sumti and relative clauses | |
// subscripting operator | |
XI_clause <object> = pre:XI_pre post:XI_post { new { label = "XI_clause", pre, post } } | |
XI_pre <object> = pre:pre_clause arg:XI post:spaces? { new { label = "XI_pre", pre, arg, post } } | |
XI_post = post_clause | |
// XI_no_SA_handling <object> = pre:pre_clause arg:XI post:post_clause { new { label = "XI_no_SA_handling", pre, arg, post } } | |
// hesitation | |
// Very very special case. Handled in the morphology section. | |
// Y_clause = spaces? Y spaces? | |
// event properties _ inchoative, etc. | |
ZAhO_clause <object> = pre:ZAhO_pre post:ZAhO_post { new { label = "ZAhO_clause", pre, post } } | |
ZAhO_pre <object> = pre:pre_clause arg:ZAhO post:spaces? { new { label = "ZAhO_pre", pre, arg, post } } | |
ZAhO_post = post_clause | |
// ZAhO_no_SA_handling <object> = pre:pre_clause arg:ZAhO post:post_clause { new { label = "ZAhO_no_SA_handling", pre, arg, post } } | |
// time interval size tense | |
ZEhA_clause <object> = pre:ZEhA_pre post:ZEhA_post { new { label = "ZEhA_clause", pre, post } } | |
ZEhA_pre <object> = pre:pre_clause arg:ZEhA post:spaces? { new { label = "ZEhA_pre", pre, arg, post } } | |
ZEhA_post = post_clause | |
// ZEhA_no_SA_handling <object> = pre:pre_clause arg:ZEhA post:post_clause { new { label = "ZEhA_no_SA_handling", pre, arg, post } } | |
// lujvo glue | |
ZEI_clause <object> = pre:ZEI_pre post:ZEI_post { new { label = "ZEI_clause", pre, post } } | |
// ZEI_clause_no_SA = ZEI_pre_no_SA ZEI ZEI_post | |
ZEI_pre <object> = pre:pre_clause arg:ZEI post:spaces? { new { label = "ZEI_pre", pre, arg, post } } | |
// ZEI_pre_no_SA = pre_clause | |
ZEI_post = spaces? | |
// ZEI_no_SA_handling <object> = pre:pre_clause arg:ZEI post:post_clause { new { label = "ZEI_no_SA_handling", pre, arg, post } } | |
// time distance tense | |
ZI_clause <object> = pre:ZI_pre post:ZI_post { new { label = "ZI_clause", pre, post } } | |
ZI_pre <object> = pre:pre_clause arg:ZI post:spaces? { new { label = "ZI_pre", pre, arg, post } } | |
ZI_post = post_clause | |
// ZI_no_SA_handling <object> = pre:pre_clause arg:ZI post:post_clause { new { label = "ZI_no_SA_handling", pre, arg, post } } | |
// conjoins relative clauses | |
ZIhE_clause <object> = pre:ZIhE_pre post:ZIhE_post { new { label = "ZIhE_clause", pre, post } } | |
ZIhE_pre <object> = pre:pre_clause arg:ZIhE post:spaces? { new { label = "ZIhE_pre", pre, arg, post } } | |
ZIhE_post = post_clause | |
// ZIhE_no_SA_handling <object> = pre:pre_clause arg:ZIhE post:post_clause { new { label = "ZIhE_no_SA_handling", pre, arg, post } } | |
// single word metalinguistic quote marker | |
ZO_clause <object> = pre:ZO_pre post:ZO_post { new { label = "ZO_clause", pre, post } } | |
ZO_pre <object> = pre:pre_clause arg:ZO post:spaces? word:any_word after:spaces? { new { label = "ZO_pre", pre, arg, post, value = new { word, after } } } | |
ZO_post = post_clause | |
// ZO_no_SA_handling = pre:pre_clause arg:ZO post:spaces? word:any_word after:spaces? { new { label = "ZO_no_SA_handling", pre, arg, post, value = new { word, after } } } | |
// delimited quote marker | |
ZOI_clause <object> = pre:ZOI_pre post:ZOI_post { new { label = "ZOI_clause", pre, post } } | |
ZOI_pre <object> = pre:pre_clause arg:ZOI post:spaces? open:zoi_open words:zoi_word* close:zoi_close after:spaces? { new { label = "ZOI_pre", pre, arg, post, value = new { open, words, close, after } } } | |
ZOI_post = post_clause | |
// ZOI_no_SA_handling <object> = pre:pre_clause arg:ZOI post:spaces? open:zoi_open words:zoi_word* close:zoi_close after:spaces? { new { label = "ZOI_no_SA_handling", pre, arg, post, value = new { open, words, close, after } } } | |
// prenex terminator (not elidable) | |
ZOhU_clause <object> = pre:ZOhU_pre post:ZOhU_post { new { label = "ZOhU_clause", pre, post } } | |
ZOhU_pre <object> = pre:pre_clause arg:ZOhU post:spaces? { new { label = "ZOhU_pre", pre, arg, post } } | |
ZOhU_post = post_clause | |
// ZOhU_no_SA_handling <object> = pre:pre_clause arg:ZOhU post:post_clause { new { label = "ZOhU_no_SA_handling", pre, arg, post } } | |
// ___ MORPHOLOGY ___ | |
CMENE <object> = expr:cmene { new { label = "CMENE", arg = expr } } | |
BRIVLA <object> = expr:(gismu_2 / lujvo / fuhivla) { new { label = "BRIVLA", arg = expr } } | |
gismu_2 <object> = expr:(gismu) { new { label = "gismu", arg = expr } } | |
CMAVO <object> = expr:(A / BAI / BAhE / BE / BEI / BEhO / BIhE / BIhI / BO / BOI / BU / BY / CAhA / CAI / CEI / CEhE / CO / COI / CU / CUhE / DAhO / DOI / DOhU / FA / FAhA / FAhO / FEhE / FEhU / FIhO / FOI / FUhA / FUhE / FUhO / GA / GAhO / GEhU / GI / GIhA / GOI / GOhA / GUhA / I / JA / JAI / JOhI / JOI / KE / KEhE / KEI / KI / KOhA / KU / KUhE / KUhO / LA / LAU / LAhE / LE / LEhU / LI / LIhU / LOhO / LOhU / LU / LUhU / MAhO / MAI / ME / MEhU / MOhE / MOhI / MOI / NA / NAI / NAhE / NAhU / NIhE / NIhO / NOI / NU / NUhA / NUhI / NUhU / PA / PEhE / PEhO / PU / RAhO / ROI / SA / SE / SEI / SEhU / SI / SOI / SU / TAhE / TEhU / TEI / TO / TOI / TUhE / TUhU / UI / VA / VAU / VEI / VEhO / VUhU / VEhA / VIhA / VUhO / XI / ZAhO / ZEhA / ZEI / ZI / ZIhE / ZO / ZOI / ZOhU / cmavo) { new { label = "CMAVO", arg = expr } } | |
// This is a Parsing Expression Grammar for the morphology of Lojban. | |
// ___ GRAMMAR ___ | |
// This grammar classifies words by their morphological class (cmene, | |
// gismu, lujvo, fuhivla, cmavo, and non_lojban_word). | |
// | |
//The final section sorts cmavo into grammatical classes (A, BAI, BAhE, ..., ZOhU). | |
// | |
// mi'e ((xorxes)) | |
lojban_word = CMENE / CMAVO / BRIVLA | |
any_word <object> = arg:lojban_word post:spaces? { new { label = "any_word", arg, post } } | |
zoi_open = lojban_word | |
zoi_word = non_lojban_word | |
zoi_close = lojban_word | |
//___________________________________________________________________ | |
cmene <object> = expr:(!h &consonant_final coda? (any_syllable / digit)+ &pause) { new { label = "cmene", arg = _join(expr) } } | |
consonant_final = (non_space &non_space)* consonant &pause | |
//cmene = !h cmene_syllable* &consonant coda? consonantal_syllable* onset &pause | |
//cmene_syllable = !doi_la_lai_lahi coda? consonantal_syllable* onset nucleus / digit | |
//doi_la_lai_lahi = (d o i / l a (h? i)?) !h !nucleus | |
//___________________________________________________________________ | |
cmavo -memoize = expr:(!cmene !CVCy_lujvo cmavo_form &post_word) { _join(expr) } | |
CVCy_lujvo = expr:(CVC_rafsi y h? initial_rafsi* brivla_core / stressed_CVC_rafsi y short_final_rafsi) { _join(expr) } | |
cmavo_form = expr:(!h !cluster onset (nucleus h)* (!stressed nucleus / nucleus !cluster) / "" y+ / digit) { _join(expr) } | |
//___________________________________________________________________ | |
brivla = expr:(!cmavo initial_rafsi* brivla_core) { _join(expr) } | |
brivla_core = expr:(fuhivla / gismu / CVV_final_rafsi / stressed_initial_rafsi short_final_rafsi) { _join(expr) } | |
stressed_initial_rafsi = expr:(stressed_extended_rafsi / stressed_y_rafsi / stressed_y_less_rafsi) { _join(expr) } | |
initial_rafsi = expr:(extended_rafsi / y_rafsi / !any_extended_rafsi y_less_rafsi) { _join(expr) } | |
//___________________________________________________________________ | |
any_extended_rafsi = expr:(fuhivla / extended_rafsi / stressed_extended_rafsi) { _join(expr) } | |
fuhivla = expr:(fuhivla_head stressed_syllable consonantal_syllable* final_syllable) { _join(expr) } | |
stressed_extended_rafsi = expr:(stressed_brivla_rafsi / stressed_fuhivla_rafsi) { _join(expr) } | |
extended_rafsi = expr:(brivla_rafsi / fuhivla_rafsi) { _join(expr) } | |
stressed_brivla_rafsi = expr:(&unstressed_syllable brivla_head stressed_syllable h y) { _join(expr) } | |
brivla_rafsi = expr:(&(syllable consonantal_syllable* syllable) brivla_head h y h?) { _join(expr) } | |
stressed_fuhivla_rafsi = expr:(fuhivla_head stressed_syllable &consonant onset y) { _join(expr) } | |
fuhivla_rafsi = expr:(&unstressed_syllable fuhivla_head &consonant onset y h?) { _join(expr) } | |
fuhivla_head = expr:(!rafsi_string brivla_head) { _join(expr) } | |
brivla_head = expr:(!cmavo !slinkuhi !h &onset unstressed_syllable*) { _join(expr) } | |
slinkuhi = expr:(consonant rafsi_string) { _join(expr) } | |
rafsi_string = expr:(y_less_rafsi* (gismu / CVV_final_rafsi / stressed_y_less_rafsi short_final_rafsi / y_rafsi / stressed_y_rafsi / stressed_y_less_rafsi? initial_pair y)) { _join(expr) } | |
//___________________________________________________________________ | |
gismu = expr:(stressed_long_rafsi &final_syllable vowel &post_word) { _join(expr) } | |
CVV_final_rafsi = expr:(consonant stressed_vowel h &final_syllable vowel &post_word) { _join(expr) } | |
short_final_rafsi = expr:(&final_syllable (consonant diphthong / initial_pair vowel) &post_word) { _join(expr) } | |
stressed_y_rafsi = expr:((stressed_long_rafsi / stressed_CVC_rafsi) y) { _join(expr) } | |
stressed_y_less_rafsi = expr:(stressed_CVC_rafsi !y / stressed_CCV_rafsi / stressed_CVV_rafsi) { _join(expr) } | |
stressed_long_rafsi = expr:( (stressed_CCV_rafsi / stressed_CVC_rafsi) consonant ) { _join(expr) } | |
stressed_CVC_rafsi = expr:(consonant stressed_vowel consonant) { _join(expr) } | |
stressed_CCV_rafsi = expr:(initial_pair stressed_vowel) { _join(expr) } | |
stressed_CVV_rafsi = expr:(consonant (unstressed_vowel h stressed_vowel / stressed_diphthong) r_hyphen?) { _join(expr) } | |
y_rafsi = expr:((long_rafsi / CVC_rafsi) y h?) { _join(expr) } | |
y_less_rafsi = expr:(!y_rafsi (CVC_rafsi !y / CCV_rafsi / CVV_rafsi) !any_extended_rafsi) { _join(expr) } | |
long_rafsi = expr:((CCV_rafsi / CVC_rafsi) consonant) { _join(expr) } | |
CVC_rafsi = expr:(consonant unstressed_vowel consonant) { _join(expr) } | |
CCV_rafsi = expr:(initial_pair unstressed_vowel) { _join(expr) } | |
CVV_rafsi = expr:(consonant (unstressed_vowel h unstressed_vowel / unstressed_diphthong) r_hyphen?) { _join(expr) } | |
r_hyphen = expr:(r &consonant / n &r) { _join(expr) } | |
//___________________________________________________________________ | |
final_syllable = onset !y !stressed nucleus !cmene &post_word | |
stressed_syllable = &stressed syllable / syllable &stress | |
stressed_diphthong = &stressed diphthong / diphthong &stress | |
stressed_vowel = &stressed vowel / vowel &stress | |
unstressed_syllable = !stressed syllable !stress / consonantal_syllable | |
unstressed_diphthong = !stressed diphthong !stress | |
unstressed_vowel = !stressed vowel !stress | |
stress -memoize = consonant* y? syllable pause | |
stressed -memoize = onset comma* [AEIOU] | |
any_syllable -memoize = expr:(onset nucleus coda? / consonantal_syllable) { _join(expr) } | |
syllable -memoize = onset !y nucleus coda? | |
consonantal_syllable = consonant syllabic &(consonantal_syllable / onset) (consonant &spaces)? | |
coda = !any_syllable consonant &any_syllable / syllabic? consonant? &pause | |
onset -memoize = h / consonant? glide / initial | |
nucleus -memoize = vowel / diphthong / y !nucleus | |
//_________________________________________________________________ | |
glide -memoize = (i / u) &nucleus !glide | |
diphthong = (a i / a u / e i / o i) !nucleus !glide | |
vowel -memoize = (a / e / i / o / u) !nucleus | |
a -memoize = comma* [aA] { "a" } | |
e -memoize = comma* [eE] { "e" } | |
i -memoize = comma* [iI] { "i" } | |
o -memoize = comma* [oO] { "o" } | |
u -memoize = comma* [uU] { "u" } | |
y -memoize = comma* [yY] { "y" } | |
//___________________________________________________________________ | |
cluster = "" consonant<2,> | |
initial_pair = &initial consonant consonant !consonant | |
initial -memoize = (affricate / sibilant? other? liquid?) !consonant !glide | |
affricate = t c / t s / d j / d z | |
liquid -memoize = l / r | |
other = p / t !l / k / f / x / b / d !l / g / v / m / n !liquid | |
sibilant = c / s !x / (j / z) !n !liquid | |
consonant -memoize = voiced / unvoiced / syllabic | |
syllabic = l / m / n / r | |
voiced = b / d / g / j / v / z | |
unvoiced = c / f / k / p / s / t / x | |
l -memoize = comma* [lL] !h !l { "l" } | |
m -memoize = comma* [mM] !h !m !z { "m" } | |
n -memoize = comma* [nN] !h !n !affricate { "n" } | |
r -memoize = comma* [rR] !h !r { "r" } | |
b -memoize = comma* [bB] !h !b !unvoiced { "b" } | |
d -memoize = comma* [dD] !h !d !unvoiced { "d" } | |
g -memoize = comma* [gG] !h !g !unvoiced { "g" } | |
v -memoize = comma* [vV] !h !v !unvoiced { "v" } | |
j -memoize = comma* [jJ] !h !j !z !unvoiced { "j" } | |
z -memoize = comma* [zZ] !h !z !j !unvoiced { "z" } | |
s -memoize = comma* [sS] !h !s !c !voiced { "s" } | |
c -memoize = comma* [cC] !h !c !s !x !voiced { "c" } | |
x -memoize = comma* [xX] !h !x !c !k !voiced { "x" } | |
k -memoize = comma* [kK] !h !k !x !voiced { "k" } | |
f -memoize = comma* [fF] !h !f !voiced { "f" } | |
p -memoize = comma* [pP] !h !p !voiced { "p" } | |
t -memoize = comma* [tT] !h !t !voiced { "t" } | |
h -memoize = comma* ['h] &nucleus { "'" } | |
//___________________________________________________________________ | |
digit = comma* [0123456789] !h !nucleus | |
post_word = pause / !nucleus lojban_word | |
pause = comma* space_char / EOF | |
EOF = comma* !. | |
comma = "," | |
non_lojban_word = !lojban_word non_space+ | |
non_space = expr:(!space_char .) { _join(expr) } | |
//Unicode_style and escaped chars not compatible with cl_peg | |
space_char = [.\t\n\r?!\u0020] { "" } | |
//___________________________________________________________________ | |
spaces -memoize = !Y expr:initial_spaces { expr } | |
initial_spaces = expr:((comma* space_char / !ybu Y)+ EOF? / EOF) { _join(expr) } | |
ybu = expr:(Y space_char* BU) { _join(expr) } | |
lujvo <object> = expr:(!gismu !fuhivla brivla) { new { label = "lujvo", arg = expr } } | |
//___________________________________________________________________ | |
A <object> = &cmavo arg:( a / e / j i / o / u ) &post_word { new { label = "A", arg } } | |
BAI <object> = &cmavo arg:( d u h o / s i h u / z a u / k i h i / d u h i / c u h u / t u h i / t i h u / d i h o / j i h u / r i h a / n i h i / m u h i / k i h u / v a h u / k o i / c a h i / t a h i / p u h e / j a h i / k a i / b a i / f i h e / d e h i / c i h o / m a u / m u h u / r i h i / r a h i / k a h a / p a h u / p a h a / l e h a / k u h u / t a i / b a u / m a h i / c i h e / f a u / p o h i / c a u / m a h e / c i h u / r a h a / p u h a / l i h e / l a h u / b a h i / k a h i / s a u / f a h e / b e h i / t i h i / j a h e / g a h a / v a h o / j i h o / m e h a / d o h e / j i h e / p i h o / g a u / z u h e / m e h e / r a i ) &post_word { new { label = "BAI", arg } } | |
BAhE <object> = &cmavo arg:( b a h e / z a h e ) &post_word { new { label = "BAhE", arg } } | |
BE <object> = &cmavo arg:( b e ) &post_word { new { label = "BE", arg } } | |
BEI <object> = &cmavo arg:( b e i ) &post_word { new { label = "BEI", arg } } | |
BEhO <object> = &cmavo arg:( b e h o ) &post_word { new { label = "BEhO", arg } } | |
BIhE <object> = &cmavo arg:( b i h e ) &post_word { new { label = "BIhE", arg } } | |
BIhI <object> = &cmavo arg:( m i h i / b i h o / b i h i ) &post_word { new { label = "BIhI", arg } } | |
BO <object> = &cmavo arg:( b o ) &post_word { new { label = "BO", arg } } | |
BOI <object> = &cmavo arg:( b o i ) &post_word { new { label = "BOI", arg } } | |
BU <object> = &cmavo arg:( b u ) &post_word { new { label = "BU", arg } } | |
BY <object> = ybu / &cmavo arg:( j o h o / r u h o / g e h o / j e h o / l o h a / n a h a / s e h e / t o h a / g a h e / y h y / b y / c y / d y / f y / g y / j y / k y / l y / m y / n y / p y / r y / s y / t y / v y / x y / z y ) &post_word { new { label = "BY", arg } } | |
CAhA <object> = &cmavo arg:( c a h a / p u h i / n u h o / k a h e ) &post_word { new { label = "CAhA", arg } } | |
CAI <object> = &cmavo arg:( p e i / c a i / c u h i / s a i / r u h e ) &post_word { new { label = "CAI", arg } } | |
CEI <object> = &cmavo arg:( c e i ) &post_word { new { label = "CEI", arg } } | |
CEhE <object> = &cmavo arg:( c e h e ) &post_word { new { label = "CEhE", arg } } | |
CO <object> = &cmavo arg:( c o ) &post_word { new { label = "CO", arg } } | |
COI <object> = &cmavo arg:( j u h i / c o i / f i h i / t a h a / m u h o / f e h o / c o h o / p e h u / k e h o / n u h e / r e h i / b e h e / j e h e / m i h e / k i h e / v i h o ) &post_word { new { label = "COI", arg } } | |
CU <object> = &cmavo arg:( c u ) &post_word { new { label = "CU", arg } } | |
CUhE <object> = &cmavo arg:( c u h e / n a u ) &post_word { new { label = "CUhE", arg } } | |
DAhO <object> = &cmavo arg:( d a h o ) &post_word { new { label = "DAhO", arg } } | |
DOI <object> = &cmavo arg:( d o i ) &post_word { new { label = "DOI", arg } } | |
DOhU <object> = &cmavo arg:( d o h u ) &post_word { new { label = "DOhU", arg } } | |
FA <object> = &cmavo arg:( f a i / f a / f e / f o / f u / f i h a / f i ) &post_word { new { label = "FA", arg } } | |
FAhA <object> = &cmavo arg:( d u h a / b e h a / n e h u / v u h a / g a h u / t i h a / n i h a / c a h u / z u h a / r i h u / r u h u / r e h o / t e h e / b u h u / n e h a / p a h o / n e h i / t o h o / z o h i / z e h o / z o h a / f a h a ) &post_word &post_word { new { label = "FAhA", arg } } | |
FAhO <object> = &cmavo arg:( f a h o ) &post_word { new { label = "FAhO", arg } } | |
FEhE <object> = &cmavo arg:( f e h e ) &post_word { new { label = "FEhE", arg } } | |
FEhU <object> = &cmavo arg:( f e h u ) &post_word { new { label = "FEhU", arg } } | |
FIhO <object> = &cmavo arg:( f i h o ) &post_word { new { label = "FIhO", arg } } | |
FOI <object> = &cmavo arg:( f o i ) &post_word { new { label = "FOI", arg } } | |
FUhA <object> = &cmavo arg:( f u h a ) &post_word { new { label = "FUhA", arg } } | |
FUhE <object> = &cmavo arg:( f u h e ) &post_word { new { label = "FUhE", arg } } | |
FUhO <object> = &cmavo arg:( f u h o ) &post_word { new { label = "FUhO", arg } } | |
GA <object> = &cmavo arg:( g e h i / g e / g o / g a / g u ) &post_word { new { label = "GA", arg } } | |
GAhO <object> = &cmavo arg:( k e h i / g a h o ) &post_word { new { label = "GAhO", arg } } | |
GEhU <object> = &cmavo arg:( g e h u ) &post_word { new { label = "GEhU", arg } } | |
GI <object> = &cmavo arg:( g i ) &post_word { new { label = "GI", arg } } | |
GIhA <object> = &cmavo arg:( g i h e / g i h i / g i h o / g i h a / g i h u ) &post_word { new { label = "GIhA", arg } } | |
GOI <object> = &cmavo arg:( n o h u / n e / g o i / p o h u / p e / p o h e / p o ) &post_word { new { label = "GOI", arg } } | |
GOhA <object> = &cmavo arg:( m o / n e i / g o h u / g o h o / g o h i / n o h a / g o h e / g o h a / d u / b u h a / b u h e / b u h i / c o h e ) &post_word { new { label = "GOhA", arg } } | |
GUhA <object> = &cmavo arg:( g u h e / g u h i / g u h o / g u h a / g u h u ) &post_word { new { label = "GUhA", arg } } | |
I <object> = &cmavo arg:( i ) &post_word { new { label = "I", arg } } | |
JA <object> = &cmavo arg:( j e h i / j e / j o / j a / j u ) &post_word { new { label = "JA", arg } } | |
JAI <object> = &cmavo arg:( j a i ) &post_word { new { label = "JAI", arg } } | |
JOhI <object> = &cmavo arg:( j o h i ) &post_word { new { label = "JOhI", arg } } | |
JOI <object> = &cmavo arg:( f a h u / p i h u / j o i / c e h o / c e / j o h u / k u h a / j o h e / j u h e ) &post_word { new { label = "JOI", arg } } | |
KE <object> = &cmavo arg:( k e ) &post_word { new { label = "KE", arg } } | |
KEhE <object> = &cmavo arg:( k e h e ) &post_word { new { label = "KEhE", arg } } | |
KEI <object> = &cmavo arg:( k e i ) &post_word { new { label = "KEI", arg } } | |
KI <object> = &cmavo arg:( k i ) &post_word { new { label = "KI", arg } } | |
KOhA <object> = &cmavo arg:( d a h u / d a h e / d i h u / d i h e / d e h u / d e h e / d e i / d o h i / m i h o / m a h a / m i h a / d o h o / k o h a / f o h u / k o h e / k o h i / k o h o / k o h u / f o h a / f o h e / f o h i / f o h o / v o h a / v o h e / v o h i / v o h o / v o h u / r u / r i / r a / t a / t u / t i / z i h o / k e h a / m a / z u h i / z o h e / c e h u / d a / d e / d i / k o / m i / d o ) &post_word { new { label = "KOhA", arg } } | |
KU <object> = &cmavo arg:( k u ) &post_word { new { label = "KU", arg } } | |
KUhE <object> = &cmavo arg:( k u h e ) &post_word { new { label = "KUhE", arg } } | |
KUhO <object> = &cmavo arg:( k u h o ) &post_word { new { label = "KUhO", arg } } | |
LA <object> = &cmavo arg:( l a i / l a h i / l a ) &post_word { new { label = "LA", arg } } | |
LAU <object> = &cmavo arg:( c e h a / l a u / z a i / t a u ) &post_word { new { label = "LAU", arg } } | |
LAhE <object> = &cmavo arg:( t u h a / l u h a / l u h o / l a h e / v u h i / l u h i / l u h e ) &post_word { new { label = "LAhE", arg } } | |
LE <object> = &cmavo arg:( l e i / l o i / l e h i / l o h i / l e h e / l o h e / l o / l e ) &post_word { new { label = "LE", arg } } | |
LEhU <object> = &cmavo arg:( l e h u ) &post_word { new { label = "LEhU", arg } } | |
LI <object> = &cmavo arg:( m e h o / l i ) &post_word { new { label = "LI", arg } } | |
LIhU <object> = &cmavo arg:( l i h u ) &post_word { new { label = "LIhU", arg } } | |
LOhO <object> = &cmavo arg:( l o h o ) &post_word { new { label = "LOhO", arg } } | |
LOhU <object> = &cmavo arg:( l o h u ) &post_word { new { label = "LOhU", arg } } | |
LU <object> = &cmavo arg:( l u ) &post_word { new { label = "LU", arg } } | |
LUhU <object> = &cmavo arg:( l u h u ) &post_word { new { label = "LUhU", arg } } | |
MAhO <object> = &cmavo arg:( m a h o ) &post_word { new { label = "MAhO", arg } } | |
MAI <object> = &cmavo arg:( m o h o / m a i ) &post_word { new { label = "MAI", arg } } | |
ME <object> = &cmavo arg:( m e ) &post_word { new { label = "ME", arg } } | |
MEhU <object> = &cmavo arg:( m e h u ) &post_word { new { label = "MEhU", arg } } | |
MOhE <object> = &cmavo arg:( m o h e ) &post_word { new { label = "MOhE", arg } } | |
MOhI <object> = &cmavo arg:( m o h i ) &post_word { new { label = "MOhI", arg } } | |
MOI <object> = &cmavo arg:( m e i / m o i / s i h e / c u h o / v a h e ) &post_word { new { label = "MOI", arg } } | |
NA <object> = &cmavo arg:( j a h a / n a ) &post_word { new { label = "MA", arg } } | |
NAI <object> = &cmavo arg:( n a i ) &post_word { new { label = "NAI", arg } } | |
NAhE <object> = &cmavo arg:( t o h e / j e h a / n a h e / n o h e ) &post_word { new { label = "NAhE", arg } } | |
NAhU <object> = &cmavo arg:( n a h u ) &post_word { new { label = "NAhU", arg } } | |
NIhE <object> = &cmavo arg:( n i h e ) &post_word { new { label = "NIhE", arg } } | |
NIhO <object> = &cmavo arg:( n i h o / n o h i ) &post_word { new { label = "NIhO", arg } } | |
NOI <object> = &cmavo arg:( v o i / n o i / p o i ) &post_word { new { label = "NOI", arg } } | |
NU <object> = &cmavo arg:( n i / d u h u / s i h o / n u / l i h i / k a / j e i / s u h u / z u h o / m u h e / p u h u / z a h i ) &post_word { new { label = "NU", arg } } | |
NUhA <object> = &cmavo arg:( n u h a ) &post_word { new { label = "NUhA", arg } } | |
NUhI <object> = &cmavo arg:( n u h i ) &post_word { new { label = "NUhI", arg } } | |
NUhU <object> = &cmavo arg:( n u h u ) &post_word { new { label = "NUhU", arg } } | |
PA <object> = &cmavo arg:( d a u / f e i / g a i / j a u / r e i / v a i / p i h e / p i / f i h u / z a h u / m e h i / n i h u / k i h o / c e h i / m a h u / r a h e / d a h a / s o h a / j i h i / s u h o / s u h e / r o / r a u / s o h u / s o h i / s o h e / s o h o / m o h a / d u h e / t e h o / k a h o / c i h i / t u h o / x o / p a i / n o h o / n o / p a / r e / c i / v o / m u / x a / z e / b i / s o / digit ) &post_word { new { label = "PA", arg } } | |
PEhE <object> = &cmavo arg:( p e h e ) &post_word { new { label = "PEhE", arg } } | |
PEhO <object> = &cmavo arg:( p e h o ) &post_word { new { label = "PEhO", arg } } | |
PU <object> = &cmavo arg:( b a / p u / c a ) &post_word { new { label = "PU", arg } } | |
RAhO <object> = &cmavo arg:( r a h o ) &post_word { new { label = "RAhO", arg } } | |
ROI <object> = &cmavo arg:( r e h u / r o i ) &post_word { new { label = "ROI", arg } } | |
SA <object> = &cmavo arg:( s a ) &post_word { new { label = "SA", arg } } | |
SE <object> = &cmavo arg:( s e / t e / v e / x e ) &post_word { new { label = "SE", arg } } | |
SEI <object> = &cmavo arg:( s e i / t i h o ) &post_word { new { label = "SEI", arg } } | |
SEhU <object> = &cmavo arg:( s e h u ) &post_word { new { label = "SEhU", arg } } | |
SI <object> = &cmavo arg:( s i ) &post_word { new { label = "SI", arg } } | |
SOI <object> = &cmavo arg:( s o i ) &post_word { new { label = "SOI", arg } } | |
SU <object> = &cmavo arg:( s u ) &post_word { new { label = "SU", arg } } | |
TAhE <object> = &cmavo arg:( r u h i / t a h e / d i h i / n a h o ) &post_word { new { label = "TAhE", arg } } | |
TEhU <object> = &cmavo arg:( t e h u ) &post_word { new { label = "TEhU", arg } } | |
TEI <object> = &cmavo arg:( t e i ) &post_word { new { label = "TEI", arg } } | |
TO <object> = &cmavo arg:( t o h i / t o ) &post_word { new { label = "TO", arg } } | |
TOI <object> = &cmavo arg:( t o i ) &post_word { new { label = "TOI", arg } } | |
TUhE <object> = &cmavo arg:( t u h e ) &post_word { new { label = "TUhE", arg } } | |
TUhU <object> = &cmavo arg:( t u h u ) &post_word { new { label = "TUhU", arg } } | |
UI <object> = &cmavo arg:( i h a / i e / a h e / u h i / i h o / i h e / a h a / i a / o h i / o h e / e h e / o i / u o / e h i / u h o / a u / u a / a h i / i h u / i i / u h a / u i / a h o / a i / a h u / i u / e i / o h o / e h a / u u / o h a / o h u / u h u / e h o / i o / e h u / u e / i h i / u h e / b a h a / j a h o / c a h e / s u h a / t i h e / k a h u / s e h o / z a h a / p e h i / r u h a / j u h a / t a h o / r a h u / l i h a / b a h u / m u h a / d o h a / t o h u / v a h i / p a h e / z u h u / s a h e / l a h a / k e h u / s a h u / d a h i / j e h u / s a h a / k a u / t a h u / n a h i / j o h a / b i h u / l i h o / p a u / m i h u / k u h i / j i h a / s i h a / p o h o / p e h a / r o h i / r o h e / r o h o / r o h u / r o h a / r e h e / l e h o / j u h o / f u h i / d a i / g a h i / z o h o / b e h u / r i h e / s e h i / s e h a / v u h e / k i h a / x u / g e h e / b u h o ) &post_word { new { label = "UI", arg } } | |
VA <object> = &cmavo arg:( v i / v a / v u ) &post_word { new { label = "VA", arg } } | |
VAU <object> = &cmavo arg:( v a u ) &post_word { new { label = "VAU", arg } } | |
VEI <object> = &cmavo arg:( v e i ) &post_word { new { label = "VEI", arg } } | |
VEhO <object> = &cmavo arg:( v e h o ) &post_word { new { label = "VEhO", arg } } | |
VUhU <object> = &cmavo arg:( g e h a / f u h u / p i h i / f e h i / v u h u / s u h i / j u h u / g e i / p a h i / f a h i / t e h a / c u h a / v a h a / n e h o / d e h o / f e h a / s a h o / r e h a / r i h o / s a h i / p i h a / s i h i ) &post_word { new { label = "VUhU", arg } } | |
VEhA <object> = &cmavo arg:( v e h u / v e h a / v e h i / v e h e ) &post_word { new { label = "VEhA", arg } } | |
VIhA <object> = &cmavo arg:( v i h i / v i h a / v i h u / v i h e ) &post_word { new { label = "VIhA", arg } } | |
VUhO <object> = &cmavo arg:( v u h o ) &post_word { new { label = "VUhO", arg } } | |
XI <object> = &cmavo arg:( x i ) &post_word { new { label = "XI", arg } } | |
Y <object> = &cmavo arg:y+ &post_word { new { label = "Y", arg } } | |
ZAhO <object> = &cmavo arg:( c o h i / p u h o / c o h u / m o h u / c a h o / c o h a / d e h a / b a h o / d i h a / z a h o ) &post_word { new { label = "ZAhO", arg } } | |
ZEhA <object> = &cmavo arg:( z e h u / z e h a / z e h i / z e h e ) &post_word { new { label = "ZEhA", arg } } | |
ZEI <object> = &cmavo arg:( z e i ) &post_word { new { label = "ZEI", arg } } | |
ZI <object> = &cmavo arg:( z u / z a / z i ) &post_word { new { label = "ZI", arg } } | |
ZIhE <object> = &cmavo arg:( z i h e ) &post_word { new { label = "ZIhE", arg } } | |
ZO <object> = &cmavo arg:( z o ) &post_word { new { label = "ZO", arg } } | |
ZOI <object> = &cmavo arg:( z o i / l a h o ) &post_word { new { label = "ZOI", arg } } | |
ZOhU <object> = &cmavo arg:( z o h u ) &post_word { new { label = "ZOhU", arg } } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"label": "text", | |
"arg": [ | |
{ | |
"label": "intro_null", | |
"pre": [], | |
"arg": { | |
"label": "intro_si_clause", | |
"arg": [] | |
} | |
}, | |
{ | |
"label": "text_part_2", | |
"arg": "" | |
}, | |
{ | |
"label": "text_1", | |
"arg": { | |
"label": "paragraphs", | |
"arg": [ | |
{ | |
"label": "paragraph", | |
"arg": [ | |
{ | |
"label": "statement", | |
"arg": { | |
"label": "statement_1", | |
"arg": [ | |
{ | |
"label": "statement_2", | |
"arg": [ | |
{ | |
"label": "statement_3", | |
"arg": { | |
"label": "sentence", | |
"arg": [ | |
{ | |
"label": "terms", | |
"arg": [ | |
{ | |
"label": "terms_1", | |
"arg": "la .alis. " | |
}, | |
{ | |
"label": "terms_1", | |
"arg": "co'a " | |
} | |
] | |
}, | |
{ | |
"label": "bridi_tail", | |
"arg": "tatpi lo nu zutse lo rirxe korbi re'o lo mensi gi'e zukte fi no da" | |
} | |
] | |
} | |
} | |
] | |
} | |
] | |
} | |
} | |
] | |
} | |
] | |
} | |
}, | |
{ | |
"label": "faho_clause", | |
"arg": [] | |
} | |
] | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Diagnostics; | |
using System.IO; | |
using Newtonsoft.Json; | |
namespace PegasusRepro | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); | |
Trace.Listeners.Add(new TextWriterTraceListener(File.OpenWrite(@"trace.log"))); | |
var parser = new Parsers.Parser(); | |
Console.Write(JsonConvert.SerializeObject(parser.Parse("la .alis. co'a tatpi lo nu zutse lo rirxe korbi re'o lo mensi gi'e zukte fi no da"), Formatting.Indented)); | |
Console.ReadLine(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment