ãã®ããã«å¿ èŠãªã®ã¯ïŒ
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ãallo | ma_stem | èªåœ | ãã | ãã |
loã«ã®ã¿é©åããŸãã ãããã£ãŠãç¹æ§ã®æ¯èŒã®å¯äžã®é©åãªãã§ãŒã³ãåŸãããŸããã AD.VãA.no. Asupã èª¿æŽ åœ¢å®¹è©ãã ãããã£ãŠã allololoãšããåèªã¯ãè€æ°åœ¢ã®æäžçŽã®åœ¢å®¹è©æ¯é³ã®å€åããæ確ã«è¡šããŸãã
èå³æ·±ãå Žåã¯ãææ³èšè¿°èšèªã«ã€ããŠãå¥ã®ã·ãªãŒãºã®èšäºã«å°å¿µããŸãã ããã§ã¯ãããããªãïŒ
ãŠãããŒãµã«ã°ã©ããŒã¢ãã©ã€ã¶ãŒã¯æ¬¡ã®å Žæããå ¥æã§ããŸã
github.com/ArseniyBorezkiy/arda_compiler_collection
次å·ã§ã¯ãã¢ãã©ã€ã¶ãŒã®èšèšãšã³ãŒãã£ã³ã°ã«çŽæ¥é²ã¿ãŸãã