/*grammar.a27 */ %token A.501 /* A = eks; basic afterthought logical operators */ %token BAI.502 /* PA = modal operators */ %token BAhE.503 /* next word intensifier */ %token BE.504 /* JE = sumti link to attach sumti to a bri.unit */ %token BEI.505 /* JUE = sumti link to attach greater than 2nd sumti */ %token BIhI.506 /* interval component of JOI */ %token BO.507 /* CI = joins two units with shortest scope */ %token BRIVLA.508 /* PREDA = any brivla */ %token BRODA.511 /* PREDA = bridi free variable; assigned with CEI */ %token BUhA.512 /* BUA = bridi bound variable */ %token BY.513 /* TAI = individual lerfu */ %token CAhA.514 /* specifies actuality/potentiality of tense */ %token CAI.515 /* new afterthought intensifier */ %token CEI.516 /* new pro-bridi assignment operator */ %token CMENE.517 /* DJAN = names; require consonant end, then pause no LA or FOI lexemes embedded, pause before if vowel initial and preceded by a vowel */ %token CO.518 /* GO = tanru inversion operator */ %token COI.519 /* HOI = vocative marker permitted inside names must always be followed by pause or DOI */ %token CU.520 /* GA = untensed bridi (tail?) marker */ %token CUhE.521 /* tense/modal question */ %token DA.522 /* BA = sumti bound variable */ %token DAI.523 /* = metalinguistic 'pro-utterance' sumti */ %token DAhO.524 /* cancel anaphora/cataphora assignments */ %token DOI.525 /* HOI = vocative marker */ %token DUhU.526 /* descriptor for a sentence/equation */ %token FA.527 /* modifier head generic case tag */ %token FAU.528 /* auxiliary lerfu shift */ %token FAhO.529 /* normally elided 'done pause' to indicate end of utterance string */ %token FEhU.531 /* ends bridi to modal conversion */ %token FIhO.532 /* marks bridi to modal conversion */ %token FOI.533 /* lerfu operator shift */ %token FUhA.534 /* utterance referent for VOhA */ %token FUhE.535 /* open long scope for indicator */ %token FUhO.536 /* close long scope for indicator */ %token GA.537 /* KA = keks; forethought logical operators */ %token GI.538 /* KI = forethought medial marker */ %token GIhA.541 /* A = EK set for bridi */ %token GOI.542 /* JI = attaches a sumti modifier to a sumti */ %token GOhA.543 /* back-counting pro-bridi */ %token GUhA.544 /* GEK for tanru units, corresponds to JEKs */ %token I.545 /* I = sentence link */ %token JA.546 /* CA = Ceks; logical operators within metaphors */ %token JAI.547 /* tensor of time-space motion */ %token JOI.548 /* ZE = mixed connective */ %token KE.551 /* GE = left long scope marker */ %token KEI.552 /* GUE = right scope delimiter */ %token KI.554 /* multiple utterance scope for tenses */ %token KOhA.555 /* DA = sumti free variable */ %token KU.556 /* GU = right comma */ %token KUhO.557 /* mass gap, used to force elision of gaps to the top level */ /* grammar as yet undefined */ %token LA.558 /* LA = name descriptors */ %token LAhE.561 /* LAE = indirect/symbolic reference */ %token LE.562 /* LE = sumti descriptors */ %token LEhA.563 /* nonce borrowing marker */ %token LEhAVLA.564 /* borrowing brivla */ %token LEhU.565 /* LU possibly ungrammatical text right quote */ %token LI.566 /* LIO = convert number to sumti */ %token LIhU.567 /* LU = grammatical text right quote */ %token LOhU.568 /* LI = possibly ungrammatical text left quote */ %token LU.571 /* LI = grammatical text left quote */ %token LUhI.572 /* set membership descriptor */ %token LUhU.573 /* set membership close delimitor */ %token ME.574 /* ME = converts a sumti into a bri.unit */ %token MO.575 /* IE = bridi question word */ %token NA.576 /* NO = negation operator */ %token NAI.577 /* NOI = -noi attached to words to negate them */ %token NAU.581 /* lerfu alphabet cancel shift */ %token NEI.582 /* lerfu alphabet shift */ %token NIhO.583 /* NAU = new paragraph; change of subject */ %token NOI.584 /* JIA = attaches a subordinate clause to a sumti */ %token NU.585 /* PO = abstraction operator */ %token NUhI.586 /* marks the start of a termset (for compounding) */ %token NUhU.587 /* marks the end of a termset */ %token POhA.588 /* figurative speech closing marker */ %token POhI.591 /* figurative speech opening marker */ %token POhO.592 /* short terminator after partial sentences */ %token PU.593 /* PA = tenses and modal operators */ %token ROI.594 /* converts quantifiers to intensional tenses */ %token SA.595 /* metalinguistic eraser to the beginning of the current utterance */ %token SE.596 /* NU = conversion operators */ %token SEI.597 /* metalinguistic bridi insert marker */ %token SEhU.598 /* metalinguistic bridi end marker */ %token SI.599 /* metalinguistic single word eraser */ %token SIhE.601 /* lerfu cancel operator shift */ %token SOI.602 /* reciprocal sumti marker */ %token SU.603 /* metalinguistic eraser of the entire text */ %token TAhE.604 /* tense interval property markers */ %token TO.605 /* KIE = left parens */ %token TOI.606 /* KIU = right parens */ %token TUhE.607 /* multiple utterance scope mark */ %token TUhU.608 /* multiple utterance end scope mark */ %token UI.599 /* UI = attitudinals,indicators,discursives also PEI and KI'A */ %token VA.611 /* VA distance in space-time */ %token VAU.612 /* end of terms; ..and so forth */ %token VEhA.613 /* space-time interval size */ %token VIhA.614 /* space-time dimensionality marker */ %token VOhA.616 /* pro-sumti for numbered places in a bridi */ %token VOI.615 /* lerfu case shift */ %token XI.617 /* CI = subscripting operator; separated from scope operator since they do two incompatible things */ %token Y.618 /* space filler, any number of schwas with pauses */ %token ZAI.621 /* tensor showing a directional interval from the prefixed tense towards or away from the space-time reference */ %token ZEhA.622 /* indicates the size of an interval in tense */ %token ZI.623 /* indicates scalar magnitude of a tense */ %token ZIhA.624 /* A = EK set for sumti modifiers */ %token ZO.625 /* LIU = single word metalinguistic quote marker */ %token ZOI.626 /* LIE = delimited quote marker */ %token ZOhU.627 /* GOI = prenex fronting comma */ %token BOI.651 /* MEX between operand delimiter */ %token DOhE.652 /* converts a MEX operator into a MEX relation (DU) */ %token DU.653 /* BI = MEX relation */ %token GAhO.654 /* open/closed interval suffix for brackets */ %token KIhO.655 /* number comma, thousands at end of number */ %token KUhE.656 /* MEX right comma delimiter: MEX KU */ %token MAI.657 /* converts various things to utterance ordinals */ %token MAhO.658 /* converts BY to MEX operators */ %token MOI.659 /* -RA = converts number to a bridi */ %token MOhE.661 /* quantifies a sumti, inverse of LI lexeme */ %token NEhU.662 /* converts a bridi into a MEX operatior */ %token NIhE.663 /* quantifies a bridi; inverse of MOI lexeme */ %token NUhE.664 /* turns a MEX operator into a bridi; inverse of MEhO */ %token OP.665 /* MEX operator */ %token PA.666 /* NI = numbers */ %token PI.667 /* PI = decimal point/fraction - needed for piro */ %token REhO.668 /* turns a MEX relation into an operator, inverse of DOhE */ %token RO.671 /* RA- = non-numerical quantifiers */ %token TIhO.672 /* MEX precedence operator */ %token VEI.673 /* left MEX bracket */ %token VEhO.674 /* right MEX bracket */ %token words.697 /* a string of lexable Lojban word */ %token word.698 /* any single lexable Lojban word */ %token string.699 /* a possibly unlexable phoneme string */ /* The following tokens are the actual lexer tokens. The .900 series tokens are duplicates that allow limited testing of lexer rules in the context of the total grammar. */ %token lexer.A.701 /* flags a MAI utterance ordinal */ %token lexer.B.702 /* flags an EK unless EK.BO, EK.KE */ %token lexer.C.703 /* flags an EK.BO */ %token lexer.D.704 /* flags an EK.KE */ %token lexer.E.705 /* flags a JEK */ %token lexer.F.706 /* flags a JOIK */ %token lexer.G.707 /* flags a GEK */ %token lexer.H.708 /* flags a GUhEK */ %token lexer.I.709 /* flags a NA.BO */ %token lexer.J.710 /* flags a NU.KE */ %token lexer.K.711 /* flags an I.BO (may have JOIK/JEK lexer tags) */ %token lexer.L.712 /* flags a SA.PA, unless MAI (then lexer A) */ %token lexer.M.713 /* flags a GIhEK.BO */ %token lexer.N.714 /* flags a GIhEK.KE */ %token lexer.O.715 /* flags a modal operator BAI or compound */ %token lexer.P.716 /* flags a tense PU or compound */ /* lexer.O and lexer.P compounds are found within other lexer compound definitions, it is not clear that the lexer.O or lexer.P is needed in these. See lexer..C, .D, .M, .N compounds */ %token lexer.Q.717 /* flags a BY.string unless MAI (then lexer.A) */ %token lexer.R.718 /* flags a NA.KE */ /* %token lexer.S.719 /* null */ /* %token lexer.T.720 /* null */ /* %token lexer.U.721 /* null */ /* %token lexer.V.722 /* null */ /* %token lexer.W.723 /* null */ %token lexer.X.724 /* flags a NU */ %token lexer.Y.725 /* flags a SA.PA.MOI */ /*%token lexer.A.905 /* : lexer.A.701 indicators.906 */ /*%token lexer.B.910 /* : lexer.B.702 EKroot.911 */ /*%token lexer.C.915 /* : lexer.C.703 EKroot.911 BO.507 */ /*%token lexer.D.916 /* : lexer.D.704 EKroot.911 KE.551 */ /*%token lexer.E.925 /* : lexer.E.705 JEKroot.926 */ /*%token lexer.F.930 /* : lexer.F.706 JOIK.root.931 */ /*%token lexer.G.935 /* : lexer.G.707 GA.537 */ /*%token lexer.H.940 /* : lexer.H.708 GUhA.544 */ /*%token lexer.I.945 /* : lexer.I.709 NA.576 BO.507 */ /*%token lexer.J.950 /* : lexer.J.710 NU.1021 KE.551 */ /*%token lexer.K.955 /* : lexer.K.711 I.432 BO.507 */ /*%token lexer.L.960 /* : lexer.L.712 SA.PA.root.961 */ /*%token lexer.M.965 /* : lexer.M.713 GIhEK.root.1001 BO.507 */ /*%token lexer.N.966 /* : lexer.N.714 GIhEK.root.1001 KE.551 */ /*%token lexer.O.970 /* : lexer.O.715 modal.A.972 */ %token tense.974 /*%token lexer.P.980 /* : lexer.P.716 GIK.981 */ /*%token lexer.Q.985 /* : lexer.Q.717 BY.string.A.986 */ /*%token lexer.R.990 /* : lexer.R.718 NA.576 KE.551 */ /*%token lexer.S.995 /* null */ /*%token lexer.T.1000 /* null */ /*%token lexer.U.1005 /* null */ /*%token lexer.V.1010 /* null */ /*%token lexer.W.1015 /* null */ /*%token lexer.X.1020 /* : lexer.X.724 NU.1021 */ /*%token lexer.Y.1025 /* : lexer.Y.725 SA.PA.root.961 MOI.659 */ %start text.1 %% text.1 : paragraphs.2 | indicator.801 donepause.462 /* only start of text indicators will survive the lexer, all other valid ones will be absorbed; */ | indicator.801 paragraphs.2 /* | cmene.A.401 paragraphs.2 | cmene.A.401 donepause.462 */ | indicator.801 cmene.A.401 paragraphs.2 /* | indicator.801 cmene.A.401 donepause.462 */ ; paragraphs.2 : utt.string.A.10 donepause.462 | utt.string.A.10 para.mark.403 paragraphs.2 ; utt.string.A.10 : utt.string.B.11 | utt.string.A.10 I.545 utt.string.B.11 | utt.string.A.10 I.545 JOIK.JEK.422 utt.string.B.11 ; utt.string.B.11 : utt.string.C.12 /* | TUhE.607 text.1 TUhU.gap.454 */ | PU.mod.491 TUhE.607 text.1 TUhU.gap.454 ; utt.string.C.12 : utterance.20 I.BO.811 utt.string.B.11 | utterance.20 ; utterance.20 : utterance.A.21 | neg.header.31 utterance.20 ; utterance.A.21 : utterance.B.22 | free.modifier.32 | free.modifier.32 utterance.B.22 ; utterance.B.22 : EK.802 POhO.gap.455 | NA.576 POhO.gap.455 | JEK.805 POhO.gap.455 | GIhEK.416 POhO.gap.455 | ZIhEK.411 POhO.gap.455 | JOIK.806 POhO.gap.455 | MEX.310 POhO.gap.455 | terms.80 VAU.gap.456 /* answer to ma */ | links.161 | linkargs.160 | sentence.40 | header.terms.30 sentence.40 ; header.terms.30 : terms.80 ZOhU.627 | terms.80 ZOhU.627 free.modifier.32 ; neg.header.31 : NA.KU.431 | free.modifier.32 NA.KU.431 ; free.modifier.32 : free.modifier.32.A /* | free.modifier.32 free.modifier.32.A */ ; free.modifier.32.A : vocative.35 | parenthetical.36 | discursive.bridi.34 ; discursive.bridi.34 : SEI.440 bri.unit.C.153 SEhU.gap.459 | SOI.602 anaphora.400 SEhU.gap.459 | SOI.602 anaphora.400 anaphora.400 SEhU.gap.459 | SEI.440 terms.80 front.gap.451 bri.unit.C.153 SEhU.gap.459 ; vocative.35 : DOI.406 sumti.tail.A.114 DOI.gap.457 | DOI.406 sumti.tail.A.114 relative.clause.110 DOI.gap.457 /* | DOI.406 anaphora.400 DOI.gap.457 */ | DOI.406 anaphora.400 relative.clause.110 DOI.gap.457 /* | DOI.406 cmene.A.401 DOI.gap.457 */ | DOI.406 cmene.A.401 relative.clause.110 DOI.gap.457 ; parenthetical.36 : TO.605 text.1 TOI.606 ; sentence.40 : bridi.tail.50 /* bare observative or mo answer*/ | sentenceA.41 ; sentenceA.41 : GEK.807 sentenceA.41 GIK.816 sentenceA.41 | statement.42 ; statement.42 : terms.80 front.gap.451 bridi.tail.50 | NA.KE.818 statement.42 KEI.gap.453 | NUhI.586 term.set.70 bridi.tail.50 ; bridi.tail.50 : bridi.tail.A.52 | MEX.relation.301 tail.terms.71 | gek.bridi.51 | NA.576 gek.bridi.51 | inflect.sentence.53 /* | no.inflect.sentence.54 */ ; gek.bridi.51 : GEK.807 bridi.tail.50 GIK.816 bridi.tail.50 ; bridi.tail.A.52 : front.cpd.bridi.60 GIhEK.KE.814 bridi.tail.A.52 KEI.gap.453 | front.cpd.bridi.60 ; inflect.sentence.53 : PU.mod.491 no.inflect.sentence.54 ; no.inflect.sentence.54 : bri.string.130 NUhI.586 term.set.70 ; front.cpd.bridi.60 : NA.KE.818 front.cpd.bridi.60 KEI.gap.453 | front.cpd.bridi.A.61 ; front.cpd.bridi.A.61 : front.cpd.bridi.A.61 GIhEK.416 cpd.back.bridi.62 | bridi.base.A.64 ; cpd.back.bridi.62 : bridi.base.63 GIhEK.BO.813 cpd.back.bridi.62 | bridi.base.63 ; bridi.base.63 : NA.KE.818 bridi.base.63 KEI.gap.453 | bridi.base.A.64 ; bridi.base.A.64 : no.inflect.bridi.66 | inflect.bridi.65 ; inflect.bridi.65 : NU.KE.810 sentence.40 KEI.gap.453 | PU.mod.491 no.inflect.bridi.66 ; no.inflect.bridi.66 : bri.string.130 tail.terms.71 ; term.set.70 : terms.80 gap.450 | terms.80 NUhU.gap.460 term.set.70 | GEK.807 terms.80 NUhU.gap.460 GIK.816 term.set.70 /* | NA.576 GEK.807 terms.80 NUhU.gap.460 GIK.816 term.set.70 | terms.80 NUhU.gap.460 EK.802 term.set.70 */ ; tail.terms.71 : terms.80 VAU.gap.456 | VAU.gap.456 ; terms.80 : term.81 | terms.80 term.81 ; term.81 : sumti.90 | modifier.82 ; modifier.82 : mod.head.490 gap.450 | mod.head.490 sumti.90 gap.450 ; sumti.90 : sumti.A.91 | sumti.90 JOIK.EK.421 sumti.A.91 ; sumti.A.91 : sumti.B.92 | sumti.B.92 EK.BO.803 sumti.A.91 ; sumti.B.92 : sumti.C.93 | sumti.B.92 EK.KE.804 sumti.90 KEI.gap.453 ; sumti.C.93 : sumti.E.96 | indefinite.sumti.94 gap.450 ; indefinite.sumti.94 : MEX.310 sumti.tail.A.114 | MEX.310 sumti.tail.A.114 relative.clause.110 ; sumti.D.95 : sumti.E.96 | MEX.310 sumti.E.96 ; sumti.E.96 : sumti.F.97 | LAhE.561 sumti.C.93 | NA.BO.809 sumti.C.93 ; sumti.F.97 : sumti.G.98 | GEK.807 sumti.90 GIK.816 sumti.C.93 /* negation of sumti GEK handled by negation of the entire sumti in E.96 above */ ; sumti.G.98 : sumti.H.99 | sumti.H.99 relative.clause.110 gap.450 ; sumti.H.99 : anaphora.400 | BY.string.817 | LA.558 cmene.A.401 | LI.566 BY.string.817 | LI.566 MEX.310 | description.112 gap.450 | quote.arg.432 ; relative.clause.110 : relative.clause.A.111 | relative.clause.110 ZIhEK.411 relative.clause.A.111 gap.450 ; relative.clause.A.111 : GOI.542 term.81 | NOI.584 sentence.40 gap.450 ; description.112 : LA.558 sumti.tail.113 | LE.562 sumti.tail.113 | LUhI.572 sumti.90 LUhU.gap.463 | DUhU.526 sentence.40 gap.450 ; sumti.tail.113 : sumti.tail.A.114 | MEX.310 sumti.90 | sumti.D.95 sumti.tail.A.114 ; sumti.tail.A.114 : sumti.tail.B.115 | PU.mod.491 sumti.tail.B.115 | MEX.310 sumti.tail.B.115 ; sumti.tail.B.115 : NU.KE.810 sentence.40 KEI.gap.453 | bri.string.130 ; bri.string.130 : bri.string.A.131 | bri.string.A.131 CO.518 bri.string.130 ; bri.string.A.131 : bri.string.B.132 | bri.string.A.131 bri.string.B.132 ; bri.string.B.132 : bri.string.C.133 | bri.string.B.132 JOIK.JEK.422 bri.string.C.133 ; bri.string.C.133 : bri.unit.150 | bri.unit.150 BO.507 bri.string.C.133 | GUhEK.bri.unit.136 | NA.576 GUhEK.bri.unit.136 ; GUhEK.bri.unit.136 : GUhEK.808 bri.string.130 GIK.816 bri.string.C.133 ; bri.unit.150 : bri.unit.A.151 | KE.551 bri.string.A.131 KEI.gap.453 ; bri.unit.A.151 : bri.unit.B.152 | NA.576 bri.unit.150 | NU.822 bri.unit.150 ; bri.unit.B.152 : bri.unit.C.153 | bri.unit.B.152 CEI.516 bri.unit.C.153 ; bri.unit.C.153 : bri.unit.D.154 | bri.unit.D.154 linkargs.160 ; bri.unit.D.154 : bridi.valsi.402 | SE.480 bri.unit.D.154 | ME.574 sumti.90 gap.450 | LEhA.563 LEhAVLA.564 | NUhE.664 MEX.operator.302 ; linkargs.160 : BE.504 term.81 gap.450 | BE.504 term.81 links.161 gap.450 /* | BE.504 NUhI.586 term.set.70 */ ; links.161 : BEI.505 term.81 | BEI.505 term.81 links.161 | BEI.505 NUhI.586 term.set.70 ; quantifier.300 : SA.PA.812 | NIhE.663 bri.unit.C.153 MEX.gap.452 /* quantifies a bridi - inverse of -MOI */ | MOhE.661 sumti.90 MEX.gap.452 /* quantifies a sumti - inverse of LI */ ; MEX.relation.301 : DU.653 | DOhE.652 MEX.operator.302 ; MEX.operator.302 : MEX.operator.A.303 | NEhU.662 bridi.tail.50 MEX.gap.452 /* converts a bridi into a MEX operator */ | REhO.668 MEX.relation.301 ; MEX.operator.A.303 : OP.665 | SE.480 MEX.operator.A.303 | NA.576 MEX.operator.A.303 | MAhO.658 BY.string.817 ; MEX.310 : MEX.A.311 | MEX.A.311 right.bracket.471 ; MEX.A.311 : quantifier.300 | left.bracket.470 expression.320 ; expression.320 : op.string.330 tail.operands.340 | operands.350 op.string.330 tail.operands.340 ; op.string.330 : op.string.A.331 | op.string.330 JOIK.JEK.422 op.string.A.331 ; op.string.A.331 : operator.332 | GUhEK.808 op.string.330 GIK.816 operator.332 | NA.576 GUhEK.808 op.string.330 GIK.816 operator.332 ; operator.332 : operator.A.333 | KE.551 op.string.330 KEI.gap.453 ; operator.A.333 : MEX.operator.302 | precedence.404 MEX.operator.302 ; tail.operands.340 : operands.350 MEX.gap.452 /* right paren */ | MEX.gap.452 ; operands.350 : operand.351 | operands.350 operand.351 ; operand.351 : operand.A.352 | operand.351 EK.802 operand.A.352 ; operand.A.352 : operand.B.353 | operand.B.353 EK.BO.803 operand.A.352 ; operand.B.353 : operand.C.354 | operand.C.354 EK.KE.804 operand.351 KEI.gap.453 ; operand.C.354 : operand.D.355 | LAhE.561 operand.C.354 MEX.gap.452 ; operand.D.355 : quantifier.300 | left.bracket.470 expression.320 right.bracket.471 | GEK.807 operand.351 GIK.816 operand.C.354 MEX.gap.452 | NA.576 GEK.807 operand.351 GIK.816 operand.C.354 MEX.gap.452 ; /* .400 series lexemes are mostly specific strings, some of which may also be used by lexer; the lexer should not use any reference to terminals less than .400 */ anaphora.400 : KOhA.482 | DA.485 | DAI.523 | FUhA.484 VOhA.483 | VOhA.483 ; cmene.A.401 : CMENE.517 | cmene.A.401 CMENE.517 /* multiple CMENE are identified morphologically (by the lexer) -- separated by consonant & pause */ ; bridi.valsi.402 : bridi.valsi.402.A | bridi.valsi.402.A free.modifier.32 | bridi.valsi.402.A XI.SA.PA.486 ; bridi.valsi.402.A : BRIVLA.508 | SA.PA.MOI.823 /* | BRODA.511 | BUhA.512 | GOhA.543 | MO.575 | LEhAVLA.564 */ ; para.mark.403 : NIhO.583 | NIhO.583 NIhO.583 ; precedence.404 : TIhO.672 MEX.310 ; DOI.406 : DOI.525 /* | COI.519 | COI.519 DOI.525 */ ; ZIhEK.411 : ZIhA.624 | SE.596 ZIhA.624 | NA.576 ZIhA.624 | ZIhA.624 NAI.577 | SE.596 ZIhA.624 NAI.577 | NA.576 ZIhA.624 NAI.577 ; GIhEK.416 : GIhA.541 | SE.596 GIhA.541 | NA.576 GIhA.541 | GIhA.541 NAI.577 | SE.596 GIhA.541 NAI.577 | NA.576 GIhA.541 NAI.577 ; JOIK.EK.421 : EK.802 | JOIK.806 ; JOIK.JEK.422 : JOIK.806 | JEK.805 ; NA.KU.431 : NA.576 KU.556 ; quote.arg.432 : quote.arg.A.433 | quote.arg.A.433 free.modifier.32 ; quote.arg.A.433 : ZOI.quote.434 | ZO.quote.435 | LOhU.quote.436 /* | LU.571 text.1 LIhU.567 */ ; /* The quoted material in the following three terminals must be identified by the lexer, but no additional lexer processing is needed. */ ZOI.quote.434 : ZOI.626 word.698 /*pause*/ string.699 /*pause*/ word.698 ; /* pause is morphemic represented by '.' lexer assembles string.699 */ /* The lexer identifying of ZOI.quotes takes precedence over all others. Quoted text should not be lexed. */ ZO.quote.435 : ZO.625 word.698 ; /* word may not be a compound; but it can be any valid Lojban lexeme value, including ZO, ZOI, SI, SA, SU. The preparser will not lex the word per its normal lexeme */ /* The lexer flagging of ZO quotes takes precedence over all others except ZOI - a word in a ZO quote is not taken for its grammatical token meaning, but rather as a generic word. */ LOhU.quote.436 : LOhU.568 words.697 LEhU.565 ; /* words may be any Lojban words, with no claim of grammaticality; the preparser will not lex the individual words per their normal lexemes; used to quote ungrammatical Lojban, equivalent to the * or ? writing convention for such text */ /* The preparser needs one bit of sophistication for lexer.W: A quoted string should be able to contain other quoted strings - this is only a problem for a LOhU quote itself, since the LEhU clossing this quote would otherwise close the outer quotes, which is incorrect. For this purpose, we will cheat on the use of ZO in such a quote (since this is ungrammatical text, it is a sin ignored by the parser). Use ZO to mark any nested quotation LOhU. The preparser then will absorb it using lexer V, before testing for lexer W. This is obviously not the standard usage for ZO, which would otherwise cause the result to be a sumti. But, since the result will be part of an unparsed string anyway, it doesn't matter. */ /* The lexer identification of LOhU quotes precedence over all others except ZOI and ZO */ /* Metalinguistic deletors SI, SA, and SU are discussed in the comment at the end of this grammar. The processing of these deletors is next in precedence after lexer U, V, and W. Then any null grammar tokens can be marked or deleted (these rules are not given in this grammar - see the final comment). Finally standard string matching can occur using longest match posssible among the lexer lexeme rules */ /* It may be seen that any of the ZO/ZOI/LOhU trio of quotation markers may contain the powerful metalinguistic erasers. Since these quotations are not parsed internally, these operators are ignored within the quote. To erase a ZO, then, two SI's are needed after giving a quoted word of any type. ZOI takes four SI's, with the ENTIRE BODY OF THE QUOTE treated as a single 'word' since it is one lexeme. Thus one for the quote body, two for the single word delimiters, and one for the ZOI. In LOhU, the entire body is treated as a single word, so three SI's can erase it. The order of lexer rule evaluation is ZOI then ZO, then LOhU/LIhU, then SI, SA, SU in that order, and then remaining rules by longest matching string. */ SEI.440 : SEI.597 | SEI.597 free.modifier.32 ; gap.450 : KU.556 | KU.556 free.modifier.32 | error ; front.gap.451 : CU.520 | CU.520 free.modifier.32 | error ; MEX.gap.452 : KUhE.656 | KUhE.656 free.modifier.32 | error ; KEI.gap.453 : KEI.552 | KEI.552 free.modifier.32 | error ; TUhU.gap.454 : TUhU.608 | TUhU.608 free.modifier.32 | error ; POhO.gap.455 : POhO.592 | POhO.592 free.modifier.32 | error ; VAU.gap.456 : VAU.612 | VAU.612 free.modifier.32 | error ; DOI.gap.457 : KU.556 | error ; /* redundant to attach a free modifier here */ FEhU.gap.458 : FEhU.531 | FEhU.531 free.modifier.32 | error ; SEhU.gap.459 : SEhU.598 | error ; /* a free modifier on a discursive should be somewhere within the discursive. See SEI.440 */ NUhU.gap.460 : NUhU.587 | NUhU.587 free.modifier.32 ; /* not elidable ??? gives red/red errors */ BOI.gap.461 : BOI.651 | BOI.651 free.modifier.32 | error ; donepause.462 : FAhO.529 | error /* normally not spoken */ ; LUhU.gap.463 : LUhU.573 | LUhU.573 free.modifier.32 | error ; left.bracket.470 : VEI.673 | VEI.673 GAhO.654 ; right.bracket.471 : VEhO.674 | VEhO.674 GAhO.654 ; SE.480 : SE.596 | SE.596 XI.SA.PA.486 ; FA.481 : FA.527 | FA.527 XI.SA.PA.486 ; KOhA.482 : KOhA.555 | KOhA.555 XI.SA.PA.486 ; VOhA.483 : VOhA.616 | VOhA.616 XI.SA.PA.486 ; FUhA.484 : FUhA.534 | FUhA.534 XI.SA.PA.486 ; DA.485 : DA.522 | DA.522 XI.SA.PA.486 ; XI.SA.PA.486 : XI.617 SA.PA.812 ; mod.head.490 : PU.mod.491 | FA.481 ; PU.mod.491 : tense.modal.815 | PU.mod.491 JOIK.JEK.422 tense.modal.815 /* | CUhE.521 */ ; indicator.801 : lexer.A.905 ; EK.802 : lexer.B.910 ; EK.BO.803 : lexer.C.915 ; EK.KE.804 : lexer.D.916 ; JEK.805 : lexer.E.925 ; JOIK.806 : lexer.F.930 ; GEK.807 : lexer.G.935 ; GUhEK.808 : lexer.H.940 ; NA.BO.809 : lexer.I.945 ; NU.KE.810 : lexer.J.950 ; I.BO.811 : lexer.K.955 ; SA.PA.812 : lexer.L.960 BOI.gap.461 ; /* BOI is the break between multiple numbers as in 50 five-gallon drums; it also serves to break between operands in MEX */ GIhEK.BO.813 : lexer.M.965 ; GIhEK.KE.814 : lexer.N.966 ; tense.modal.815 : lexer.O.970 | FIhO.532 bri.unit.C.153 FEhU.gap.458 | tense.modal.815 XI.SA.PA.486 /* subscripts only make sense for tenses, and not for modals, but there can no provision for elision of BOI within the lexer, so this rule must be applied after all lexer compounding is completed, else a BOI would be always mandatory, even if no number/lerfu followed */ ; GIK.816 : lexer.P.980 ; BY.string.817 : lexer.Q.985 BOI.gap.461 /* | lexer.Q.985 XI.SA.PA.486 BOI.gap.461 */ ; NA.KE.818 : lexer.R.990 ; NU.822 : lexer.X.1020 ; SA.PA.MOI.823 : lexer.Y.1025 ; /* The following rules are used only in lexer processing. They have been tested for ambiguity at various levels in the YACC grammar. However, our current overflow problems have caused me to comment all references to these items out, leaving only the lexer lexeme tokens to 'stand for' the result of lexer processing. If the lexer processing is written to substitute lexer lexemes for processed strings, and then to restore the original after the parser finishes, this is satisfactory. If the lexer will insert the lexer lexemes before the processed strings, but leave the original tokens, then the uncommented version which references these following non-terminal rules should be used instead - obviously needing more YACC space. */ lexer.A.905 : lexer.A.701 indicators.906 /* | lexer.A.701 FUhE.535 indicators.906 */ ; indicators.906 : indicator.907 /* | indicators.906 indicator.907 */ ; indicator.907 : BY.string.A.986 MAI.657 | SA.PA.root.961 MAI.657 | indicator.A.908 ; indicator.A.908 : UI.599 | CAI.515 /* | indicator.A.908 NAI.577 */ ; lexer.B.910 : lexer.B.702 EKroot.911 ; EKroot.911 : A.501 | SE.596 A.501 | NA.576 A.501 | A.501 NAI.577 | SE.596 A.501 NAI.577 | NA.576 A.501 NAI.577 ; lexer.C.915 : lexer.C.703 EKroot.911 BO.507 | lexer.C.703 EKroot.911 no.FIhO.PU.mod.971 BO.507 ; lexer.D.916 : lexer.D.704 EKroot.911 KE.551 | lexer.D.704 EKroot.911 no.FIhO.PU.mod.971 KE.551 ; lexer.E.925 : lexer.E.705 JEKroot.926 ; JEKroot.926 : JA.546 | JA.546 NAI.577 | NA.576 JA.546 | NA.576 JA.546 NAI.577 | SE.596 JA.546 | SE.596 JA.546 NAI.577 ; lexer.F.930 : lexer.F.706 JOIK.root.931 ; JOIK.root.931 : JOI.548 | JOI.548 NAI.577 | SE.596 JOI.548 | SE.596 JOI.548 NAI.577 | BIhI.506 | BIhI.506 GAhO.654 GAhO.654 ; lexer.G.935 : lexer.G.707 GA.537 | lexer.G.707 SE.596 GA.537 | lexer.G.707 GA.537 NAI.577 | lexer.G.707 no.FIhO.PU.mod.971 GIK.981 ; lexer.H.940 : lexer.H.708 GUhA.544 | lexer.H.708 SE.596 GUhA.544 | lexer.H.708 GUhA.544 NAI.577 ; lexer.I.945 : lexer.I.709 NA.576 BO.507 ; lexer.J.950 : lexer.J.710 NU.1021 KE.551 ; lexer.K.955 : lexer.K.711 I.956 BO.507 | lexer.K.711 I.956 no.FIhO.PU.mod.971 BO.507 ; I.956 : I.545 | I.545 JOIK.JEK.422 ; lexer.L.960 : lexer.L.712 SA.PA.root.961 ; SA.PA.root.961 : SA.PA.A.962 | PI.667 SA.PA.A.962 ; SA.PA.A.962 : SA.PA.B.963 | RO.671 | RO.671 SA.PA.B.963 ; SA.PA.B.963 : PA.666 | SA.PA.B.963 PA.666 | SA.PA.B.963 PI.667 /* decimal point */ | SA.PA.B.963 BY.513 | SA.PA.B.963 KIhO.655 /* number comma */ ; lexer.M.965 : lexer.M.713 GIhEK.416 BO.507 | lexer.M.713 GIhEK.416 no.FIhO.PU.mod.971 BO.507 ; lexer.N.966 : lexer.N.714 GIhEK.416 KE.551 | lexer.N.714 GIhEK.416 no.FIhO.PU.mod.971 KE.551 ; lexer.O.970 : lexer.O.715 modal.A.972 ; /* the following rule is a lexer version of non terminal .815 for compounding PU/modals; it disallows the lexer to pick out FIhO clauses which would require knowledge of the grammar */ no.FIhO.PU.mod.971 : modal.A.972 | no.FIhO.PU.mod.971 JOIK.JEK.422 modal.A.972 | CUhE.521 ; modal.A.972 : modal.B.973 | modal.B.973 KI.554 | tense.974 | modal.A.972 NAI.577 ; modal.B.973 : BAI.502 | SE.596 BAI.502 ; /* tense.974 : tense.A.975 | KI.554 | tense.A.975 KI.554 ; /* KI reassigns the space-time reference to the destination for future tense usage or reverts to here/now if not attached to a specified time/space tense.A.975 : tense.B.976 | CAhA.514 | tense.B.976 CAhA.514 ; /* specifies actuality/potentiality of the bridi /* puca'a = actually was /* baca'a = actually will be /* bapu'i = can and will have /* banu'o = can, but won't have yet /* canu'ojebapu'i = can, hasn't yet, but will tense.B.976 : time.1030 /* time-only /* space defaults to the time-space reference space | space.time.1040 /* space-only unless specified with VIhA /* time defaults to the time-space reference time | time.1030 space.time.1040 /* time and space - specification of time if time.1030 leads, the space.time.1040 specifies only space (if space.time.1040 is marked with VIhA for space-time the tense is self-contradictory) | ZAI.621 /* tensor with unspecified time-space | interval.prop.1039 /* property of the interval with unspecified time-space or interval | ZAI.621 interval.prop.1039 /* unspecified time-space with tensor and property ; /* this is the complete time-space destination specification /* puvi = was here (all the compound specificity is optional /* zai = to here and now from elsewhere */ lexer.P.980 : /* lexer.P.716 */ GIK.981 ; GIK.981 : GI.538 | GI.538 NAI.577 ; lexer.Q.985 : lexer.Q.717 BY.string.A.986 ; BY.string.A.986 : BY.513 | BY.string.A.986 BY.513 | BY.string.A.986 PI.667 ; lexer.R.990 : lexer.R.718 NA.576 KE.551 ; lexer.X.1020 : lexer.X.724 NU.1021 ; NU.1021 : NU.A.1022 | NU.1021 JOIK.JEK.422 NU.A.1022 ; NU.A.1022 : NU.585 | NU.585 NAI.577 ; lexer.Y.1025 : lexer.Y.725 SA.PA.root.961 MOI.659 ; /* time.1030 : time.A.1031 | time.A.1031 interval.prop.1039 | time.B.1032 | time.B.1032 interval.prop.1039 ; /* allows specification of a property of the interval /* bazairu'i = will continuously until /* puzaita'e = has habitually since /* bana'o = will (in the future) typically /* caze'uvi'o = intermittently during a long interval is /* puroroi = always in the past nothing is specified about location when SA.PA+ROI is attached to PU, and when it is attached to VA per space.time.1040, nothing is specified about time (unless VI is specified as space-time with vi'e/VIhA) time.A.1031 : time.C.1033 ZAI.617 ZEhA.618 ZAI.617 | time.A.1031 ZEhA.618 ZAI.617 | time.C.1033 ZAI.617 ZAI.617 | time.A.1031 ZAI.617 ; /* parallels space.time.A.1041, but is only useful to time travellers time.B.1032 : time.C.1033 ZAI.617 | time.C.1033 ; /* attaches a tensor to a time-only tense /* ZAI specifies until.../since... as a tensor towards or away from the destination, if no interval is specified, the interval is to the time space reference or to infinity. If interval is specified, this is a magnitude of interval in the direction specified (or a fraction if towards the space-time reference origin /* bazai = will until /* puzai = has since /* baze'o = will everafter /* puze'o = ever before did /* cazai = only now /* caze'o = eternally time.C.1033 : time.D.1034 | time.D.1034 ZEhA.618 ; /* ZEhA specifies an interval size at the destination /* time only tense-with-or-without- specified-interval unit /* puze'i = was for a short time /* baze'u = will for a long time /* caze'u = during a long interval is time.D.1034 : time.E.1035 | ZEhA.618 | ZEhA.618 time.E.1035 ; /* a prefixed ZEhA specifies the interval size of space-time reference in the time dimension. If there is no time.E.1035 this is also the size of the destination interval, since the origin and destination are co-located. /* ze'ipu = before this point in time /* ze'upu = before this epoch /* ze'u = during this space-time epoch time.E.1035 : time.H.1038 | time.G.1037 | time.F.1036 ; /* this is the basic time only tense unit /* the first unit of a compound string can act as a temporary shift from the time space reference point time.F.1036 : ZI.623 | time.F.1036 ZI.623 | time.F.1036 JAI.547 ZI.623 ; /* compound distance only time/space locator /* with no direction, this has no English equivalent - it merely parallels VA in a logical manner; with ZAI, it is similar to time.G, except that ZAI specifies direction towards or away from the space-time reference origin, rather than an absolute direction, as does time.G /* LALR1 ambiguity prevents mixing PU and PUZI units but allows mixture of either with JAIZI units time.G.1037 : PU.593 ZI.623 | time.G.1037 PU.593 ZI.623 ; /* compound direction+distance time locator /* acts as does VA compounds - each succeeding unit is distance directional from the previous unit /* this was the former interpretation of PU+ZI /* puzu = a long time ago was /* pubazi = was a little while later going to /* puzubazi = a while ago was a short time later going to /* zi = a short time/space away /* zuzi = no english equivalent /* pujaizu = was a long time later going to /* bajaizu = will have a long time earlier time.H.1038 : PU.593 | time.H.1038 PU.593 ; /* compound directional time locator /* each succeeding PU is directional from the previous destination point /* pu = was /* puba = was going to /* bapu = will have been /* pubapu = was going to have /* bapuba = will have been going to interval.prop.1039 : SA.PA.root.961 ROI.594 | TAhE.604 ; /* extensional/intensional interval parameters /* roroi = always and everywhere /* roroiku'avi = always here (ku'a = intersection) /* puroroi = always in the past (see time.1030) nothing is specified about location when attached to PU, or about time when attached to VI per space.time.1040 (unless VI is specified as space-time with vi'e/VIhA) /* paroi = once upon a time (somewhere) /* paroiku'avi = once upon a time here space.time.1040 : space.time.A.1041 | space.time.A.1041 interval.prop.1039 ; /* attaches a property to the interval -parallels time.1030 /* vazairu'i = continuously between there and here /* vuve'izaita'e = habitually while moving nearer from yonder /* vana'o = there, typically (saying nothing about here) /* vize'uvi'o = intermittently (scattered) over a large area here /* see time.1030 for quantified tense example space.time.A.1041 : space.time.B.1042 | space.time.A.1041 ZAI.621 | space.time.A.1041 ZAI.621 VEhA.y3 /* attaches tensor directionality to the interval - parallels time.A.1031 ; /* VEhA allows a route of variable distance /* what 2 term locaters used to mean /* vuve'izai = towards here a little ways from yonder /* old vuva /* vive'uze'o = going yonder from nearby /* old vivu /* what 3 and greater term locaters used to mean /* vuve'izaize'o = passing by here at medium distance /* old vuvavu /* vuve'uzaize'o = passing very close by here /* old vuvivu /* vuza'iva = a little nearer than far away space.time.B.1042 : space.time.D.1044 | space.time.D.1044 space.time.C.1043 | space.time.C.1043 ; /* attaches the interval/dimensionality to the tense - parallels time.C.1033 /* vuve'i = a spot yonder /* vuve'u = an up-to-3-dimensional large region yonder /* vuve'avi'a = a medium-sized area yonder /* vuvi'e = a long space-time away space.time.C.1043 : VEhA.613 | VIhA.614 | VEhA.613 VIhA.614 ; /* this unit gives an interval in space-time (VEhA) to be attached to space.time.D. In addition, VIhA specifies the dimensionality of VA and VEhA usage the tense space.time.D.1044 : space.time.E.1045 | space.time.D.1044 space.time.E.1045 ; /* a prefixed VEhA/VIhA specifies the interval size of space-time reference in the space or space-time dimension. If there is no space.time.B, then this is also the size of the destination interval, since they are co-located. /* ve'ava = near this spot /* ve'uvi = within this region /* ve'uvi'evi = within this large space-time space.time.E.1045 : VA.611 | space.time.E.1045 ZI.623 | space.time.E.1045 JAI.547 ZI.623 ; /* compound space(-time) locator tense /* as a change from current meanings, this acts like compound PA, specifying a distance, but no direction for succeeding motions - it hence has minimal use without JAI /* the function of JAI gives a direction relative to the space time-origin, with the 2nd compound unit indicating the size of the step /* parallels time.F/time.G - no equivalent to time.H /* The following are "Lexer-only rules". They don't fit in the current grammar due to space problems. In effect, the allow certain combinations of lexemes to be absorbed into adjacent words anywhere in the text, with no effect on the deep structure grammar. The grammar of these lexemes is simplistic, except for cases where they interact with each other. Where it is believed that conflicts could exist, the grammar of these constructs has been put in the above grammar, even though the lexer/Preparser will actually prevent these from being passed thru to the parse routine. (Otherwise we have to put unacceptably fancy code in the PreParser to determine just when these can be passed thru, and when they can't.) Lexemes in this category include BAhE.503, and indicators as defined above. (The above grammar handles utterance scope (free.modifier) and clause scope (gap) applications of the latter, however, and indicators should be allowed to be absorbed into almost any word without changing its grammar /* SI.599, SA.595, and SU.603 are metalinguistic erasers. Delimiters POhA, POhI, DAhO, and FUhO can occur anywhere in text, though they may have no particular meaning in some extreme circumstances. Similarly, all of the shift lexemes for BY.513 letterals can legally occur anywhere. As they act like shift keys or shift locks of various types, their meaningfulness is dependent on whether any BY.513 lexemes appear within their scope. Thus, no meaningful rules can be given for any of these. FOI, among the shift lexemes, has a minimal grammar, and is listed separately below. Any of these invisible lexemes should be considered valid lexible members of word.698, and can thus be erased with SI. token.1100 : word.698 | BAhE.503 word.698 ; null.1101 : word.698 SI.599 | possibly unlexable word (PAUSE) SI.599 | utterance.20 SA.595 | possibly unlexable string (PAUSE) SA.595 erases back to the last individual token I or NIhO or start of text, ignoring the insides of ZOI, ZO, and LOhU/LEhU quotes. Start of text is defined for SU below. | text.1 SU.603 | possibly unparsible text (PAUSE) SU.603 erases back to start of text which is the beginning of a speaker's statement, a parenthesis (TO/TOI), a LU/LIhU quote, or a TUhE/TUhU utterance string | FOI.533 SA.PA.root.961 BOI.651 /* non-elidable BOI /* operator set lerfu shift | SIhE.601 /* operator set cancel shift | VOI.615 /* lerfu shift | NEI.582 /* lerfu shift | NAU.581 /* lerfu shift | FAU.528 /* lerfu shift | POhA.588 | POhI.591 | DAhO.524 | FUhO.536 | Y.618 ; indicatable.string.1102 : any string defined as generating a lexer lexeme from lexer.B on (lexer A strings are implicitly handled two rules hence) | any remaining token.1100 | indicatable.string lexer.A.905 ; /* The only strings for which indicators generate a potential ambiguity are those which contain either NAI or CAI. An indicator cannot be inserted in between a token and its negating NAI or intensifying CAI, else you can't tell whether it is the indicator or the original token being intensified. The above broadens this slightly beyond the minimum necessary, saying that UI (and its possibly accompanying CAI/NAI) are not permitted within any string that the lexer analyzes to be a single unit and replaces by (or prefixes by, depending on implementation) a lexer lexeme. An indicator can, however be to the end of such a string, or to any other single token, in which case it is absorbed as a grammatical null. This leaves only an indicator at the head of text to be passed on to the grammar, where it will always be accepted. */ %%