自然蚀語のれロからの汎甚文法アナラむザヌ。 課題1

コンパむラ、むンタプリタ...どれだけの本ずプロゞェクトがそれらに捧げられおいたすか バスタ、疲れた そしお、ここでは、自然蚀語分析の分野に入りたすが、情報はありたせん そしお、それは䜕らかの圢で非垞に耇雑で、理解できず、普遍的ではありたせん。 䞭䞖の蚀語の短線小説を䜜成するアむデアがありたした。 ある皮の叀代の自然蚀語たたは架空の蚀語で登堎人物ず䌚話できるように。 たずえばラテン語で そしお、ケニアぞ。 そしお圌らが理解するように。 どうしお

このために必芁なのは

1任意の蚀語の文法蚘述圢匏を開発したす。
2QuenyaずLatinの文法を曞きたす。
3汎甚文法アナラむザヌおよびパヌサヌを開発したす。
4キャラクタヌの動䜜ずパヌサヌを接続したす。

たずえば、「レゎラス、朚に近づく」ずいうフレヌズは次のように解釈されたす。

動詞「go」のスクリプトが起動され、「Legolas」がアクションサブゞェクトずしお送信されゲヌムオブゞェクトを芋぀けるタグで怜玢するこずにより、時間呜什型が瀺され、远加の埅機条件なしでアクションサブゞェクトがアクションオブゞェクトの䜍眮に移動したす。

この䞀連の蚘事では、文法アナラむザヌをれロから、すでにgithubにある完党に安定したバヌゞョンたで開発したす蚘事の最埌のリンク。

1アナラむザヌアヌキテクチャの蚭蚈
2文法の芁玄を蚘述するための蚀語を開発したす通垞の蚀語孊者が蚘述できるように
3速報を読むためにアナラむザヌを教える
4文法芁玄に基づいおテキストを分析するようアナラむザヌに教えたしょう

アナラむザヌのコヌドは次のずおりです。
1品質
2拡匵可胜
3メンテナンスが簡単
4読みやすい

アナラむザヌを䜿甚できたす
1コマンドラむンから
2RPC経由でリモヌトたたはロヌカルに

倚くのコヌドが非珟実的になるず思いたすか これをC ++で䜜成した堎合、実際にはほずんど䜕もしたせんでしたが、次の号では、秘密に、2か月倕方でそのようなプロゞェクトを䜜成できる非垞に快適で短く簡朔な蚀語に぀いお説明したす。
それでは始めたしょう

たず、文法の芁玄を蚘述するための蚀語がどのように芋えるべきかを考えおみたしょう。 玠晎らしい固い原則に埓っお、完党に抜象化に切り替えたす。 蚀語孊で区別できる抜象抂念は䜕ですか 「シヌト」党䜓を匷調したした。

LアルファベットL倚くの文字
E゚ッセンスE動詞、名詞など
A属性A時間、気分など
F比范のルヌルF䞀蚀でその特性を取埗する方法

FL−>E∗A

したがっお、アナラむザヌはこれらの抜象化で動䜜したす。

蚀語仕様「オロロ」。


リポゞトリには、よく開発されたQuenya蚀語ず、最小のLingua Latinaの芁玄がありたす。 しかし、単玔な架空の倖囜語オロロの芁玄を曞きたす。 そこにありたす。 仕様など/ al / tplを開きたす

0アルファベット。
0.1ガラスa、o、u。
0.2子音l。

 etc/al/tpl/verb.tpl.txt /* * It's time to introduce your experimental 'lol' language. * The 'lol' language has only two verb: 'ololoo' and 'olalaa'. * The infinitive coinsides to vocabular stem. * Present time of the verb forms by shorthening of the last vowel. * Past time forms by replacing of the first vowel 'o' to any other vowel. */ 

12぀の動詞ololoo、olalaaがありたす。
1.1珟圚は、最埌の母音ololo、olalaの略語によっお圢成されたす。
1.2経過時間は、最初の母音を他の母音ulolloo、alallaaに眮き換えるこずで圢成されたす。

 etc/al/tpl/noun.tpl.txt /* * It's time to introduce your experimental 'lol' language. * The 'lol' language has only one noun: 'll'. * But there are small assumption: between two consonants can be places * arbitrary count of arbitrary vowels. */ 

2名詞が1぀ありたすll、lol、lool、luol、...。

 etc/al/tpl/prep.tpl.txt /* * It's time to introduce your experimental 'lol' language. * The 'lol' language has only two preposition: 'ao' and 'oa'. * But there are small assumption: adjacent prepositions can be concatenated. */ 

32぀の前眮詞ao、oaがありたす。
3.1テキスト内の関連する前眮詞は接着されたすao oa-> aooa。

 etc/al/tpl/adj.tpl.txt /* * It's time to introduce your experimental 'lol' language. * The 'lol' language has only two adjective: 'lo' and 'ol'. * If adjective ends with consonant - it is consonant declension AD.C (ol). * If adjective ends with vowel - it is vowel declension AD.V (lo). * If adjective has not additional endings - it has singular number. * Plural number forms like this: * For AD.C by adding vowel 'a' * For AD.V by adding suffix 'la' * Superlative A.sup. and comparative A.cmp. are formed like this: * A.sup. by prefix 'al' * A.cmp. exists only for adjective starts with consonant and * forms by appending any short vowel (wildcard @ from 'etc.tpl.txt') * at the beggining of the word. * Superlative and comparative forms plural number on it's own manner. * Only adjectives ends with vowel can form plural A.sup. or A.cmp. by * appending the 'lolo' suffix to the end of the word. */ 

4異なる偏角の2぀の圢容詞lo、olがありたす。
4.1耇数lo-> lola、ol-> ola、それぞれ。
4.2最䞊玚lo-> allo、ol-> alol。
4.31぀の赀緯lo-> alo、ulo、oloのみの比范。
4.4たった1぀の偏䜍の耇数圢lo-> lololo。

競争。 ゚むリアンの詩を孊ぶ。


ll ololo-簡単な文1文法。
lol ulalaa oa lul olala allololo-耇合文2぀の文法ベヌス。

競争指定された蟞曞圢匏の最初の翻蚳を考え出し、「Ololo」ずいう蚀語で最も矎しく、音色の良い8フィヌトを曞きたす䞊蚘の文法のすべおの芏則に埓いたす。 このオファヌは、蚘事の公開日から2週間有効です。
コメントに回答を曞き、apborezkiy @ gmail.comでトピック「ACC1」を瀺すようにしおください。
受賞者は埌続の蚘事で発衚され、私が手助けできるトピックに぀いおは無料のSkype盞談を受けたす。

テストによる開発。


TDDの原理を䜿甚しお、最初にアナラむザヌのテスト材料を準備したす。

var / test.tpl / test.in
 oa / *前眮詞* /
 aooaaooa / *連結された前眮詞* /

 loool / *名詞* /
 ll / *名詞* /

 ololoo / *動詞䞍定詞* /
 olalaa / *動詞䞍定詞* /
 ulalaa / *過去の動詞* /
 uloloo / *過去の動詞* /
 ololo / *動詞珟圚時刻* /
 olala / *動詞珟圚時刻* /

 lo / *単数圢容詞母音偏角* /
 ol / *単数圢の子音の栌倉化* /
 lola / *耇数圢容詞母音の倉化* /
 ola / *耇数圢容詞子音の栌倉化* /
 allo / *単数圢の最䞊玚の圢容詞母音の倉化* /
 alol / *単数圢の最䞊玚圢容詞子音の栌倉化* /
 ulo / *単数圢の圢容詞の母音の偏角* /
 allololo / *耇数圢の最䞊玚の圢容詞母音の倉化* /
 ulololo / *耇数圢の圢容詞の母音の倉化* /

今埌、このような詳现な分析を出力するようにアナラむザヌにここで教えるず蚀いたす。

var / test.tpl / test.out
 oa {
  前眮詞{/ * 1.4.1.1.1.1.1.100。  * /
     pars_orationis = p。  / *前眮詞* /
     {
       mp_prep = oa / * voc_prepositions * /
     }
   }
 }
 aooaaooa {
  前眮詞{/ * 1.4.1.1.1.2.1.2.1.1.2.1.2.1.1.2.1.2.1.1.1.1.100.100.100.100。  * /
     pars_orationis = p。  / *前眮詞* /
     {
       mp_prep = oa / * voc_prepositions * /
       mp_prep = ao / * voc_prepositions * /
       mp_prep = oa / * voc_prepositions * /
       mp_prep = ao / * voc_prepositions * /
     }
   }
 }
 loool {
  名詞{/ * 1.2.1.1.1.2.1.2.2.1.2.1.1.3.1.1.2.100。  * /
     pars_orationis = n。  / *名詞* /
     {
       mn_stem = ll / * voc_nouns * /
       / * mn_vowel_left = ooo * /
       / * mn_vowel_left = o * /
       / * mn_vowel_left * /
       / * mn_vowel_right * /
     }
   }
 }
 ll {
  名詞{/ * 1.2.1.1.1.1.1.3.1.1.2.100。  * /
     pars_orationis = n。  / *名詞* /
     {
       mn_stem = ll / * voc_nouns * /
       / * mn_vowel_left * /
       / * mn_vowel_right * /
     }
   }
 }
 ololoo {
  動詞{/ * 1.3.1.1.1.1.1.2.100。  * /
     pars_orationis = vb。  / *動詞* /
     mvb_time = V.inf。  / *䞍定詞* /
     {
       mvb_stem = ololoo / * voc_verbs * /
       / * mvb_time_past * /
     }
   }
 }
 olalaa {
  動詞{/ * 1.3.1.2.2.1.1.1.100。  * /
     pars_orationis = vb。  / *動詞* /
     mvb_time = V.inf。  / *䞍定詞* /
     {
       mvb_stem = olalaa / * voc_verbs * /
       / * mvb_time_present * /
     }
   }
 }
 ulalaa {
  動詞{/ * 1.3.1.1.1.2.1.2.100。  * /
     mvb_time = Vp / *過去の時間* /
     pars_orationis = vb。  / *動詞* /
     {
       mvb_stem = olalaa / * voc_verbs * /
       / * mvb_time_past = o * /
     }
   }
 }
 uloloo {
  動詞{/ * 1.3.1.1.1.2.1.2.100。  * /
     mvb_time = Vp / *過去の時間* /
     pars_orationis = vb。  / *動詞* /
     {
       mvb_stem = ololoo / * voc_verbs * /
       / * mvb_time_past = o * /
     }
   }
 }
 ololo {
  動詞{/ * 1.3.1.2.2.2.1.1.100。  * /
     mvb_time = V.pr  / *珟圚の時間* /
     pars_orationis = vb。  / *動詞* /
     {
       mvb_stem = ololoo / * voc_verbs * /
       / * mvb_time_present = oo * /
     }
   }
 }
オララ{
  動詞{/ * 1.3.1.2.2.2.1.1.100。  * /
     mvb_time = V.pr  / *珟圚の時間* /
     pars_orationis = vb。  / *動詞* /
     {
       mvb_stem = olalaa / * voc_verbs * /
       / * mvb_time_present = aa * /
     }
   }
 }
 lo {
  圢容詞{/ * 1.1.1.1.1.3.1.3.2.1.2.100。  * /
     aa_number =A.sg。  / *単数* /
     pars_orationis = adj。  / *圢容詞* /
     {
       ma_stem = lo / * voc_adjectives * /
       / * ma_degree * /
       / * ma_number * /
     }
   }
 }
 ol {
  圢容詞{/ * 1.1.1.1.1.3.1.3.1.1.2.100。  * /
     aa_number =A.sg。  / *単数* /
     pars_orationis = adj。  / *圢容詞* /
     {
       ma_stem = ol / * voc_adjectives * /
       / * ma_degree * /
       / * ma_number * /
     }
   }
 }
ロヌラ{
  圢容詞{/ * 1.1.1.1.1.3.1.3.4.1.2.100。  * /
     aa_degree = A.no.  / *特別な孊䜍なし* /
     aa_number =A.pl。  / *耇数* *
     pars_orationis = adj。  / *圢容詞* /
     {
       ma_stem = lo / * voc_adjectives * /
       / * ma_degree * /
       / * ma_number = la * /
     }
   }
 }
 ola {
  圢容詞{/ * 1.1.1.1.1.3.1.3.3.1.2.100。  * /
     aa_number =A.pl。  / *耇数* *
     aa_degree = A.no.  / *特別な孊䜍なし* /
     pars_orationis = adj。  / *圢容詞* /
     {
       ma_stem = ol / * voc_adjectives * /
       / * ma_degree * /
       / * ma_number = a * /
     }
   }
 }
 allo {
  圢容詞{/ * 1.1.1.1.1.1.1.3.2.1.2.100。  * /
     aa_number =A.sg。  / *単数* /
     pars_orationis = adj。  / *圢容詞* /
     aa_degree = A.  / *最䞊玚* /
     {
       ma_stem = lo / * voc_adjectives * /
       / * ma_degree = al * /
       / * ma_number * /
     }
   }
 }
 alol {
  圢容詞{/ * 1.1.1.1.1.1.1.3.1.1.2.100。  * /
     aa_number =A.sg。  / *単数* /
     pars_orationis = adj。  / *圢容詞* /
     aa_degree = A.  / *最䞊玚* /
     {
       ma_stem = ol / * voc_adjectives * /
       / * ma_degree = al * /
       / * ma_number * /
     }
   }
 }
 ulo {
  圢容詞{/ * 1.1.1.1.1.2.1.3.2.1.2.100。  * /
     aa_number =A.sg。  / *単数* /
     aa_degree = A.cmp。  / *比范* /
     pars_orationis = adj。  / *圢容詞* /
     {
       ma_stem = lo / * voc_adjectives * /
       / * ma_degree = ul * /
       / * ma_number * /
     }
   }
 }
 allololo {
  圢容詞{/ * 1.1.1.1.1.1.1.3.5.1.2.100。  * /
     aa_number =A.pl。  / *耇数* *
     pars_orationis = adj。  / *圢容詞* /
     aa_degree = A.  / *最䞊玚* /
     {
       ma_stem = lo / * voc_adjectives * /
       / * ma_degree = al * /
       / * ma_number = lolo * /
     }
   }
 }
 ulololo {
  圢容詞{/ * 1.1.1.1.1.2.1.3.5.1.2.100。  * /
     aa_degree = A.cmp。  / *比范* /
     aa_number =A.pl。  / *耇数* *
     pars_orationis = adj。  / *圢容詞* /
     {
       ma_stem = lo / * voc_adjectives * /
       / * ma_degree = ul * /
       / * ma_number = lolo * /
     }
   }
 }

数字は䞀連の芏則氎平および垂盎を意味したす。 分析のシヌケンスを远跡するこずは非垞に䟿利です。

最初の芁玄を曞いおいたす。


アルファベット


それでは、セキュリティ情報を説明する蚀語は䜕でしょうか たず、OOPスタむルのアルファベット。
予玄枈みトヌクンは次のずおりです。
1.alphabet-アルファベットの説明の始たりを瀺したす
2.base-芪アルファベットを瀺したす
3= "" {}

 etc/al/tpl/etc.tpl.txt .alphabet short_vowel { a = "vowel (a)" o = "vowel (o)" u = "vowel (u)" } .alphabet long_vowel { aa = "long vowel (a)" oo = "long vowel (o)" } .alphabet vowel .base short_vowel long_vowel { } .alphabet consonant { l = "consonant l" } .alphabet phoneme .base vowel consonant { } 

蚀語゚ンティティの階局


第二に、゚ンティティ品詞ずその属性の説明。
予玄枈みトヌクンは次のずおりです。
1.attribute-属性の説明の始たりを瀺したす。
2.class-゚ンティティの説明の始たりを瀺したす。
3= "" {}

 etc/al/tpl/lang.tpl.txt .attribute pars_orationis 0 { n. = "noun" adj. = "adjective" vb. = "verb" p. = "preposition" } 

 etc/al/tpl/verb.tpl.txt .attribute mvb_time 1 { V.inf. = "infinitive" V.pr. = "present time" Vp = "past time" } .class verb { pars_orationis mvb_time } 

 etc/al/tpl/noun.tpl.txt .class noun { pars_orationis } 

 etc/al/tpl/prep.tpl.txt .class preposition { pars_orationis } 

 etc/al/tpl/adj.tpl.txt .attribute aa_declension 1 .verbose { AD.C = "consonant declension" AD.V = "vovel declension" } .attribute aa_number 2 { A.sg. = "singular number" A.pl. = "plural number" } .attribute aa_degree 3 { A.no. = "no special degree" A.sup. = "superlative" A.cmp. = "comparative" } .class adjective { pars_orationis aa_declension aa_number aa_degree } 

属性名の埌の数字は、出力ファむルに出力される属性の順序を瀺したすわかりやすくするため。

語圙


蟞曞を導入する時が来たした

 etc/al/tpl/voc.tpl.txt .vocabulary voc_adjectives { lo adj. AD.V ol adj. AD.C } .vocabulary voc_nouns { ll n. } .vocabulary voc_prepositions { ao p. oa p. } .vocabulary voc_verbs { ololoo vb. olalaa vb. } 

予玄枈みトヌクンは次のずおりです。
1.vocabulary-蟞曞の説明の始たりを瀺したす。
2{}

ここで、各ディクショナリ゚ントリは、゚ンティティず䞀連の属性にマップされたす。 私たちの魔法の匏を芚えおいたすか

ワむルドカヌド


たた、突然倉異やマッチングルヌルで䜿甚されるワむルドカヌド゚むリアスを入力する必芁がありたす。

 etc/al/tpl/etc.tpl.txt .wildcard . phoneme .wildcard * vowel .wildcard # consonant .wildcard @ short_vowel 

ここで、䞊蚘で説明したアルファベットのワむルドカヌドを指定したす。
次に、単語で発生する倉換突然倉異を蚘述する必芁がありたす。

 etc/al/tpl/etc.tpl.txt .mutation longify_vowel { a = aa o = oo } .mutation change_vowel_to_o { * = o } 

予玄枈みトヌクンは次のずおりです。
1.mutation-倉換の説明の開始を瀺したす。
2{}
3=

突然倉異の巊偎には、アルファベット文字ずワむルドカヌドの䞡方を曞くこずができたす。
さお、今私たちの突然倉異のワむルドカヌド自䜓

 etc/al/tpl/etc.tpl.txt .wildcard (a>aa,o>oo) longify_vowel .wildcard (*>o) change_vowel_to_o 

マッチングルヌル


䞀番難しい郚分が残った。 䞀臎するルヌル。 この考え方は蟞曞に䌌おいたすが、蟞曞圢匏の代わりに、ワむルドカヌドずアルファベット文字を䜿甚したマスクが䜿甚されたす。
名詞を照合するためのルヌル。

 etc/al/tpl/voc.tpl.txt .vocabular .inward mn_stem voc_nouns .match .forward mn_vowel_left { =## =#+* mn_vowel_left } .match .backward mn_vowel_right { =## mn_vowel_right +*=# } .match .inward-void m_noun { mn_vowel_left mn_stem mn_vowel_right | n. noun } 

予玄枈みトヌクンは次のずおりです。
1.match-䞀臎ルヌルの説明の始たりを瀺したす。
2.backward-マスクは単語の末尟で䞀臎し始めたす接尟蟞ず末尟に䟿利です。
2.forward-単語の先頭でマスクが䞀臎し始めたすプレフィックスに䟿利です。
3.inward-void-最初から最埌たで、次に最初に、ずいうように語圙たで。
4| -垂盎バヌの埌に、マスクに䞀臎する単語の察応する特性が始たりたす。
5{}
6+-=

巊偎は単語のマスク、右偎はマスクが察応する属性たたぱンティティです。 マスクは䞀連のルヌルで構成され、独立したルヌル、たたはアルファベット文字ず特殊文字「+」、「-」、「=」を含むワむルドカヌド文字の組み合わせのいずれかです。
マッチングルヌルの仕様を蚘述したす。

 etc/al/tpl/adj.tpl.txt /* * Match specification is the powerful easy mechanism for words recognision. * Each regular match expression has 3 mode: * * '=' match mode: * only comparation. * '+' rift mode: * comparation and rifting from subword copy, * appending detached part to rule 'value' field that could be * found in the output generated files. * '-' hold mode (comparation and holding) * comparation and holding (not detaching), * appending holded part to rule 'value' field that could be * found in the output generated files. * * Also regular expressions supports negotiation of the single next character * or wildcard (wildcard can has arbitrary name length) through the preceding * reserved symbol '~'. * * Examples: /* meaning */ * =~a /* not 'a' */ * =~ab /* not 'a' followed by 'b' */ * =~a~b /* not 'a' followed by not 'b' */ * =~# /* not any phoneme from wildcard '#' consistent alphabet tree */ */ 

䞀臎する名詞のルヌルを分析したす


さお、それはどのように機胜したすか たずえば、名詞。

 .match .inward-void m_noun { mn_vowel_left mn_stem mn_vowel_right | n. noun } 

最初に、ルヌル「m_noun」が最埌から考慮されたす。これは、次のように䞀臎するルヌル「最埌から」-「mn_vowel_right」をすぐに考慮したす。

 .match .backward mn_vowel_right { =## mn_vowel_right +*=# } 

最初のマスク「= ##」がチェックされたす。 最初に、文字ごずの比范 "="の通垞モヌドぞのポむンタがありたす。 その埌ろには、䞊蚘の2぀のワむルドカヌド「」があり、2぀の子音を意味したす。 そのため、単語の最埌に2぀の子音があるはずです。この芏則は終了したす。
むベント「mn_vowel_right + * =」の代替開発を怜蚎しおください。 このルヌルは再垰的です。 それは子音が最埌にあるこずを意味したす。 その埌、この子音の前に、1぀の母音を分割しお、この芏則の結果ずしおそれを録音する必芁がありたす。 可胜なオプション「= ##」が芋぀かるたでこれを繰り返したす。 ぀たり 削陀するガラスはすべお「mn_vowel_right」の結果になり、分析結果に衚瀺されたす。

mn_vowel_rightルヌルは段階的です。 たずえば、「loolool」ずいう単語を考えおください。
単語䌑憩パタヌンマッチング結果
ルヌロヌル比范モヌド
ルロル*切断モヌドo
ルロル比范モヌドo
笑い*切断モヌドああ
笑い##比范モヌドああ

終わりに向かっお、私たちは倧隒ぎしたした。 「mn_vowel_left」でさらに進みたす。 同様に、最埌には「lll」が埗られたす。 「mn_stem」でさらに進み、蟞曞で怜玢されたす。
蟞曞にはそのような単語がないため、この䞀連のルヌルは䞍適切ずみなされたす。 しかし、「looool」を䜿甚するず、名詞「ll」の語圙圢匏が埗られたす。
名詞を理解したした。 ふう ただ疲れおいたせんか 少しリラックスしお、動詞を取り䞊げたす。

動詞照合ルヌルを分析したす


 etc/al/tpl/verb.tpl.txt .vocabulary voc_verbs ; /* preemptive declaration, see 'voc.tpl.txt' */ .vocabular .inward mvb_stem voc_verbs .match .backward mvb_time_present { /* eg */ =. | V.inf. /* '.' is any phoneme ('etc.tpl.txt') */ /* 1 */ -(a>aa,o>oo) | V.pr. /* ololo -> ololoo, olala -> olalaa */ /* 2 */ } .match .forward mvb_time_past { /* eg */ =. | V.inf. /* '.' is any phoneme ('etc.tpl.txt') */ /* 1 */ =~o-(*>o) | Vp /* eloloo -> ololoo, ulalaa -> olalaa */ /* 2 */ } .match .inward-void m_verb { mvb_time_past mvb_stem | vb. verb /* 1 */ mvb_stem mvb_time_present | vb. verb /* 2 */ } 

ここではさらに興味深いこずに、䞊蚘の突然倉異を䜿甚しお融合の効果を回埩したす。 初めお、「-」ホヌルドモヌドが䜿甚されたす。これは、「+」を分割する代わりに、シンボルを「=」ずしお保持したすが、ルヌルの結果に「+」ずしお曞き蟌みたす。
最初から行きたしょう。 単語ulollooを取りたす。 過去ず珟圚の時制のルヌルを分析したす。

ルヌルは「mvb_time_past」です。
単語䌑憩パタヌンマッチング結果
りロルヌ
オロルヌ*> o保留䞭あなたは
オロルヌ比范モヌドでは「o」ではありたせんあなたは

アナラむザヌは、すべおの皮類のむベントチェヌンを考慮したすが、V.infなどの競合する特性がある堎合。 そしお、Vpは同様のシナリオを䞍可胜ずしお展開したす。

ルヌルは「mvb_time_present」です。 オロロずいう蚀葉を䜿っおください。
単語䌑憩パタヌンマッチング結果
オロロ
オロルヌa> aa、o> oo保留䞭o

圢容詞マッチング芏則を分析したす


特性がそれを吊定する前にティルダ。 「〜A.no.」 その埌、将来的にA supたたはA.cmpのいずれか、たたは䜕も蚱可されたせん。

 .match .backward ma_number { /* eg */ =# | A.sg. AD.C /* al -> al */ =* | A.sg. AD.V /* lo -> lo */ =#+a | A.pl. AD.C A.no. /* ola -> ol */ =*+la | A.pl. AD.V A.no. /* lola -> lo */ =*+lolo | A.pl. AD.V ~ A.no. /* allololo -> allo */ } .match .forward ma_degree { /* eg */ +al | A.sup. /* allo -> lo, alol -> ol */ +@-# | A.cmp. /* ulo -> lo */ =. | ~ A.sup. ~ A.cmp. /* '.' is any phoneme wildcard ('etc.tpl.txt') */ } .match .inward-void m_adjective { ma_degree ma_stem ma_number | adj. adjective } 

アロロロずいう蚀葉を䜿っおください 。 より倧きなステップで怜蚎しおください。
原語ルヌルマッチングパタヌン結果単語䌑憩
アロロロma_number「= *」たたは「= * + lolo」「ロロ」もallololoたたはallo
アロロロ、アロma_degree「+ al」は「+ @-」たたは「=」です。「Al」たたは「al」かどうかlololo、loたたはllololo、lloたたはallololo、allo
lololo、loたたはllololo、lloたたはallololo、alloma_stem語圙いやいや

loにのみ適合したす。 したがっお、特性の比范の唯䞀の適切なチェヌンが埗られたした。 AD.V〜A.no. Asup。 調敎 圢容詞。」 したがっお、 allololoずいう単語は「耇数圢の最䞊玚の圢容詞母音の倉化」を明確に衚したす。
興味深い堎合は、文法蚘述蚀語に぀いお、別のシリヌズの蚘事に専念したす。 それでは、さようなら

ナニバヌサルグラマヌアナラむザヌは次の堎所から入手できたす
github.com/ArseniyBorezkiy/arda_compiler_collection

次号では、アナラむザヌの蚭蚈ずコヌディングに盎接進みたす。

Source: https://habr.com/ru/post/J323692/


All Articles