17.1: ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ PetitParser
- ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
- Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΠΊ PDF
- ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΡΠ°Π½ΠΈΡΡ
- 43764
- ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΠ΅ΡΠ³Π΅Π»Ρ, ΠΠ°ΠΌΡΠ΅Π½ ΠΠ°ΡΡΡ, Π‘ΡΠ΅ΡΠ°Π½ ΠΡΠΊΠ°ΡΡ, Π―Π½Π½ΠΈΠΊ ΠΠ°Π²Π°Π»Ρ
- Square Bracket Associates
PetitParser β ΡΡΠΎ ΡΡΠ΅Π΄Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ². PetitParser ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° Smalltalk ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠ΅ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π½Π° Π»Π΅ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, PetitParser Π»ΡΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ Smalltalk.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, PetitParser Π½Π΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ°ΠΊΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ°Ρ , ΠΊΠ°ΠΊ SmaCC ΠΈ ANTLR. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ΅ΡΡΡΠ΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°: ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π±Π΅Π· ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Packrat. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, PetitParser Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ΅Π½ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈ ΡΠ΅ΡΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°:
ΠΠ΅ΡΡΠΊΠ°Π½ΠΈΡΡΡΡΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΎ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π²Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° (ΡΠΊΠ°Π½Π΅Ρ ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ). ΠΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ.
ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°ΠΊ Π³ΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²; ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΎΠ½ΡΠΎΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΌΠΈ, ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠ²Π°ΡΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (PEG) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ°. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠΎΠ² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ PEG Π²ΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π΅ΡΠ΅Π²Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠΌ.
ΠΠ°ΡΡΠ΅ΡΡ Packrat Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π»Π΅Π²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ΅ΠΉ Π² PEG.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° PetitParser
Π₯Π²Π°ΡΠΈΡ Π±ΠΎΠ»ΡΠ°ΡΡ, ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ. PetitParser ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π² Pharo, ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ Java ΠΈ Dart. ΠΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½Ρ 1 . Π§ΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ PetitParser Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π·, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Gofer:
ΠΠΎΠ΄ \(\PageIndex{1}\) (Pharo): Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° PetitParser
ΠΠΎΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ smalltalkhubUser: ΠΏΡΠΎΠ΅ΠΊΡ Β«ΠΠΎΡΡΒ»: Β«PetitParserΒ»; ΠΏΠ°ΠΊΠ΅Ρ: 'ConfigurationOfPetitParser'; Π½Π°Π³ΡΡΠ·ΠΊΠ°. (Π‘Π²Π΅ΡΡΠΊΠ°Ρ Π±Π΅ΡΠ΅Π΄Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ: #ConfigurationOfPetitParser) Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ: #loadDefault.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ PetitParser, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² Π³Π»Π°Π²Π΅ ΠΎ petit parser Π² ΠΊΠ½ΠΈΠ³Π΅ Moose. 2
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ PetitParser ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Smalltalk. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ Π±ΡΠΊΠ²Ρ, Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±ΡΠΊΠ² ΠΈΠ»ΠΈ ΡΠΈΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:0032
ΠΠΎΠ΄ \(\PageIndex{2}\) (Pharo): Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²
|identifier| ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ := #Π±ΡΠΊΠ²Π° asParser , #ΡΠ»ΠΎΠ²ΠΎ asParser Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠ°. Π°Π½Π°Π»ΠΈΠ· ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'a987jlkj' ββ #($a #($9 $8 $7 $j $l $k $j))Π ΠΈΡΡΠ½ΠΎΠΊ \(\PageIndex{1}\): ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ΄Π΅ \(\PageIndex{2}\).
ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ \(\PageIndex{1}\) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ββΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ². ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ°ΡΡΠ΅Ρ. Π‘ΡΡΠ΅Π»ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΡΡΠ³Π»ΡΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ β ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΡ (ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ). ΠΠ²Π°Π΄ΡΠ°ΡΡ (Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π½Π° ΡΡΠΎΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅) β ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ, ΡΠΎΡΡΠΎΡΡΠΈΠ΅ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² (Π½Π΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ²).
ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
. ΠΡΠ»ΠΈ Π²Ρ ΡΠ³Π»ΡΠ±ΠΈΡΠ΅ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ°ΡΡΠ΅ΡΠ°:
ΠΠΎΠ΄ \(\PageIndex{3}\) (Pharo): Π‘ΠΎΡΡΠ°Π² ΠΏΠ°ΡΡΠ΅ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΠ°ΡΡΠ΅ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°
PPSequenceParser (ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ²) PPPredicateObjectParser (ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄Π½Ρ Π±ΡΠΊΠ²Ρ) PPPossessiveRepeatingParser (ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ°) PPPredicateObjectParser (ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°)
ΠΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ , (Π·Π°ΠΏΡΡΠ°Ρ) ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ· (1) ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π±ΡΠΊΠ² ΠΈ (2) ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· Π½ΡΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° β ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ #letter asParser
. ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ Π±ΡΠΊΠ²Ρ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ CharacterΒ»isLetter
. ΠΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ β ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ star
. ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΠΉ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ (Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΎΠ²) Π½Π° Π²Ρ
ΠΎΠ΄Π΅ ( Ρ.Π΅. , ΡΡΠΎ ΠΆΠ°Π΄Π½ΡΠΉ ΠΏΠ°ΡΡΠ΅Ρ ). ΠΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ β ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ #word asParser
. ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΡΠΈΡΡΡ ΠΈΠ»ΠΈ Π±ΡΠΊΠ²Ρ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ CharacterΒ»isDigit
ΠΈ CharacterΒ»isLetter
.
Π Π°Π·Π±ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΡΠΎΠΊΠΈ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠ°) ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ PPParserΒ»parse:
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ΄ \(\PageIndex{4}\) (Pharo): Π Π°Π·Π±ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΡΡΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°
ΡΠ°Π·Π±ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'Π΄Π°'. β #($y #($e $a $h)) ΡΠ°Π·Π±ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'f123'. β #($f #($1 $2 $3))
Π₯ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΡΠ°Π½Π½ΡΠΌ, ΡΡΠΎ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ Π²Π²ΠΎΠ΄Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. Π§Π΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ.
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ PPFailure
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ²Π΅ΡΠ°:
ΠΠΎΠ΄ \(\PageIndex{5}\) (Pharo): ΠΠ½Π°Π»ΠΈΠ· Π½Π΅Π²Π΅ΡΠ½ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅
ΡΠ°Π·Π±ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: '123'. β Π±ΡΠΊΠ²Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π² 0
ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (1) Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΡΠΊΠ²ΠΎΠΉ. ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ PPFailure
β ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°ΡΡ true ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ #isPetitFailure
. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ PPParserΒ»parse:onError:
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ:
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°Π·Π±ΠΎΡ: '123' onError: [ :msg :pos | ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°: ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ].
ΠΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠ°), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
ΠΠΎΠ΄ \(\PageIndex{6}\) (Pharo): ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ: 'foo'. β ΠΏΡΠ°Π²Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ: '123'. β Π»ΠΎΠΆΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ: 'foo()'. β ΠΏΡΠ°Π²Π΄Π°
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄ΠΈΠ²ΠΈΡΡ: Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΊΠΎΠ±ΠΊΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΈ ΡΠΈΡΡΠΎΠΉ, Π½ΠΈ Π±ΡΠΊΠ²ΠΎΠΉ, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ #word asParser
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠ°ΡΡΠ΅ΡΡ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Β«fooΒ» ΠΈ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ·ΠΎΠ² PPParserΒ»matches:
Π²Π΅ΡΠ½ΡΠ» true
. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ parse
: ΠΊΠΎΡΠΎΡΡΠΉ Π²Π΅ΡΠ½Π΅Ρ #($f #($o $o))
.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»end
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ΄ \(\PageIndex{7}\) (Pharo): ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ PPParserΒ»end
ΠΊΠΎΠ½Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ: 'foo()'. β Π»ΠΎΠΆΡ
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»end
ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡ Π²Π²ΠΎΠ΄Π°. Π§ΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ, Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π»ΠΈ Ρ ΠΊΠΎΠ½ΡΠΎΠΌ Π²Π²ΠΎΠ΄Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»matchesSkipIn:
ΠΈ PPParserΒ»matchesIn:
.
ΠΠΎΠ΄ \(\PageIndex{8}\) (Pharo): ΠΠΎΠΈΡΠΊ Π²ΡΠ΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ matchesSkipIn: 'foo 123 bar12'. β ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ(#($f #($o $o)) #($b #($a $r $1 $2))) ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ In: 'foo 123 bar12'. β ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ(#($f #($o $o)) #($o #($o)) #($o #()) #($b #($a $r $1 $2)) #($a #($r $1 $2)) #($r #($1 $2)))
ΠΠ΅ΡΠΎΠ΄ PPParserΒ»matchesSkipIn:
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°Π±ΠΎΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ
ΡΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π°. Π‘ΠΏΠΎΡΠΎΠ± PPParserΒ»matchesIn:
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ΅Π½ΠΊΠ°
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΈΠ· 6 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ (ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°) Π² Π΄Π°Π½Π½ΠΎΠΌ Π²Π²ΠΎΠ΄Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ PPParserΒ»matchingSkipRangesIn:
, Π»ΠΈΠ±ΠΎ PPParserΒ»matchingRangesIn:
, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ:
ΠΠΎΠ΄ \(\PageIndex{9}\) (Pharo): ΠΠΎΠΈΡΠΊ Π²ΡΠ΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡSkipRangesIn: 'foo 123 bar12'. β ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ((ΠΎΡ 1 Π΄ΠΎ: 3) (ΠΎΡ 9 Π΄ΠΎ: 13)) ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡRangesIn: 'foo 123 bar12'. β ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ((ΠΎΡ 1 Π΄ΠΎ: 3) (ΠΎΡ 2 Π΄ΠΎ: 3) (ΠΎΡ 3 Π΄ΠΎ: 3) (ΠΎΡ 9 Π΄ΠΎ: 13) (ΠΎΡ 10 Π΄ΠΎ: 13) (ΠΎΡ 11 Π΄ΠΎ: 13))
Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ²
PetitParser ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ². Π’Π΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΡ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅. ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ , Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° \(\PageIndex{1}\).
ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ² | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|
$a asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» $a. |
‘abc’ asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ‘abc’. |
#Π»ΡΠ±ΠΎΠΉ asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ». |
#digit asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΠΎΠ΄Π½Ρ ΡΠΈΡΡΡ (0. .9). |
#letter asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΠΎΠ΄Π½Ρ Π±ΡΠΊΠ²Ρ (a..z ΠΈ A..Z). |
#word asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΡΠΈΡΡΡ ΠΈΠ»ΠΈ Π±ΡΠΊΠ²Ρ. |
#blank asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ ΡΠ°Π±ΡΠ»ΡΡΠΈΡ. |
#newline asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ. |
#space asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΡΠΎΠ±Π΅Π»Π°, Π²ΠΊΠ»ΡΡΠ°Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ. |
# Π²ΠΊΠ»Π°Π΄ΠΊΠ° asParser | ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ. |
#Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°. |
#uppercase asParser | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°. |
Π½ΠΎΠ»Ρ asParser | ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ. |
Π‘ΡΠΎΡΠΎΠ½Π° ΠΊΠ»Π°ΡΡΠ° PPPredicateObjectParser
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ
ΡΠ°Π±ΡΠΈΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°. Π§ΡΠΎΠ±Ρ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΎΡΠΏΡΠ°Π²ΡΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»asParser
ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌΡ ΠΈΠΌΡ ΡΠ°Π±ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, #punctuation asParser
).
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° \(\PageIndex{2}\).
ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ² | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|
ΡΡΡ. 1, ΡΡΡ.2 | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p1, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ p2 (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ). |
ΡΡΡ.1 / ΡΡΡ.2 | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p1, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠ°Π·Π±ΠΈΡΠ°Π΅Ρ p2. |
Ρ-Π·Π²Π΅Π·Π΄Π° | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ p. |
Ρ ΠΏΠ»ΡΡ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ p. |
Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. |
Ρ ΠΈ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ Π²Π²ΠΎΠ΄. |
Ρ ΠΎΡΡΠΈΡΠ°ΡΡ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ p ΡΠ΅ΡΠΏΠΈΡ Π½Π΅ΡΠ΄Π°ΡΡ. |
Ρ Π½Π΅ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ p Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ, Π½ΠΎ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. |
ΠΊΠΎΠ½Π΅Ρ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ Π²Π²ΠΎΠ΄Π°. |
ΠΏ ΡΠ°Π·: ΠΏ | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p ΡΠΎΠ²Π½ΠΎ n ΡΠ°Π·. |
p ΠΌΠΈΠ½.: n ΠΌΠ°ΠΊΡ.: m | Π Π°Π·Π±ΠΈΡΠ°Π΅Ρ p Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ n ΡΠ°Π· Π΄ΠΎ m ΡΠ°Π· |
Ρ starLazy: q | ΠΠ°ΠΊ Π·Π²Π΅Π·Π΄Π°, Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ, ΠΊΠΎΠ³Π΄Π° q Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ |
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ2
ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ Π½Π°ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°
:
ΠΠΎΠ΄ \(\PageIndex{10}\) (Pharo): ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ2 := #letter asParser , (#Π±ΡΠΊΠ²Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΡΠ΅ΡΠ° / #ΡΠΈΡΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΡΠ΅ΡΠ°) Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠ°.Π ΠΈΡΡΠ½ΠΎΠΊ \(\PageIndex{2}\): ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°2, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ΄Π΅ \(\PageIndex{10}\).
ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°
Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ PPParserΒ»==>
, PPParserΒ»flatten
, PPParserΒ»token
ΠΈ PPParserΒ»trim
, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° \(\PageIndex{3}\).
ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|
Ρ ΠΏΠ»ΠΎΡΠΊΠΈΠΉ | Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° p. |
ΡΠΎΠΊΠ΅Π½ p | ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ , Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ PPToken Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ. |
Ρ ΠΎΡΠ΄Π΅Π»ΠΊΠ° | ΠΠ±ΡΠ΅Π·Π°Π΅Ρ ΠΏΡΠΎΠ±Π΅Π»Ρ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΡ. |
p ΠΎΡΠ΄Π΅Π»ΠΊΠ°: trimParser | ΠΠ±ΡΠ΅Π·Π°Π΅Ρ Π²ΡΠ΅, ΡΡΠΎ trimParser ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ). |
Ρ ==> Π±Π»ΠΎΠΊ | ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² Π°ΠΠ»ΠΎΠΊ . |
Π§ΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ ΡΡΡΠΎΠΊΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΠΏΠ°ΡΡΠ΅Ρ, ΠΎΡΠΏΡΠ°Π²ΠΈΠ² Π΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»flatten
.
ΠΠΎΠ΄ \(\PageIndex{11}\) (Pharo): ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ flatten, ΡΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π±ΡΠ»Π° ΡΡΡΠΎΠΊΠ°
|identifier| ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ := (#Π±ΡΠΊΠ²Π° asParser , (#Π±ΡΠΊΠ²Π° asParser / #ΡΠΈΡΡΠ° asParser) Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠ°). ΡΠ°Π·Π±ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'ajka0' β #($a #($j $k $a $0)) Π°Π½Π°Π»ΠΈΠ· ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'ajka0' β 'ajka0'
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»token
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ flatten
, Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ PPToken
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΊΠ΅Π½, ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ.
ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ PPParserΒ»trim
Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π½Π° Π²Ρ
ΠΎΠ΄Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΎΠ±Π΅Π»Ρ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ° ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠΎΠ΄ \(\PageIndex{12}\) (Pharo): ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ PPParserΒ»trim Π΄Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²
|identifier| ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ := (#letter asParser , #word asParser star) ΡΠ³Π»Π°Π΄ΠΈΡΡ. ΡΠ°Π·Π±ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'ajka' β ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π±ΡΠΊΠ²Π° 0 ΠΠ½Π°Π»ΠΈΠ· ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: 'ajka' β 'ajka'
ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° Π²ΡΠ·ΠΎΠ²Ρ PPParserΒ»trim:
Ρ #space asParser
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ trim:
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ
Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠΎΠ΄ \(\PageIndex{13}\) (Pharo): ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ PPParserΒ»trim: Π΄Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π²
| ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΡΠΎΠΊΠ° | ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ := (#letter asParser , #word asParser star) ΡΠ³Π»Π°Π΄ΠΈΡΡ. ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ := '//' asParser, #newline asParser ΠΎΡΡΠΈΡΠ°Π΅Ρ Π·Π²Π΅Π·Π΄ΠΎΡΠΊΡ. ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌΡΠΉ := ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ / #space asParser. ΡΡΡΠΎΠΊΠ° := ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±ΡΠ΅Π·ΠΊΠ°: ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ. ΡΠ°Π·Π±ΠΎΡ ΡΡΡΠΎΠΊΠΈ: '// ΠΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ oneIdentifier // Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ' β 'oneIdentifier'
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ PPParserΒ»==>
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΡΠΊΠ°Π·Π°ΡΡ Π±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²Π²ΠΎΠ΄Ρ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΈΡΠ»ΠΎ ΠΈΠ· Π΅Π³ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠΎΠ΄ \(\PageIndex{14}\) (Pharo): Π Π°Π·Π±ΠΎΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»
number := #digit asParser plus flatten ==> [ :str | ΡΡΡΠΎΠΊΠ° ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ]. ΡΠ°Π·Π±ΠΎΡ ΡΠΈΡΠ»Π°: '123' β 123
Π ΡΠ°Π±Π»ΠΈΡΠ΅ \(\PageIndex{3}\) ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ². ΠΡΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
ΠΎΡΠΎΡΠΎ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ
ΡΠ°Π±ΡΠΈΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°Ρ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΠΠΏΠ°ΡΡΠ΅Ρ
. ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ± ΡΡΠΈΡ
ΡΠ°Π±ΡΠΈΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
, ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΡΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ SeparateBy:
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½ΠΎΠ²ΠΎΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π²Π²ΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ
Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π‘ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΎΠΉ Π΄Π»Ρ ΡΠΈΡΠ»Π° (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°), ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΡΠ°ΡΡΠΈΠ½ΡΡΠ²Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ PPDelegateParser
Π·Π°ΡΠ°Π½Π΅Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π°. ΠΠ°ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ #setParser:
ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΊΠΎΠ±ΠΎΠΊ (ΡΠΌ. ΡΠΈΡΡΠ½ΠΎΠΊ \(\PageIndex{4}\) Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ):
ΠΠΎΠ΄ \(\PageIndex{15}\) (Pharo): ΠΠ½Π°Π»ΠΈΠ· Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
term := PPDelegateParser new. prod := PPDelegateParser Π½ΠΎΠ²ΡΠΉ. prim := PPDelegateParser Π½ΠΎΠ²ΡΠΉ. term setParser: (prod , $+ asParser trim , term ==> [ :nodes | ΡΠ·Π»Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ + ΡΠ·Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ]) / ΠΈΠ·Π΄. prod setParser: (prim , $* asParser trim , prod ==> [ :nodes | ΡΠ·Π»Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ * ΡΠ·Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ]) / ΠΏΡΠΈΠΌ. prim setParser: ($( asParser trim , term , $) asParser trim ==> [ :nodes | nodes second ]) / ΡΠΈΡΠ»ΠΎ.
Π’Π΅ΡΠΌΠΈΠ½ Β«ΠΏΠ°ΡΡΠ΅ΡΒ» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ (1) ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Β«+Β», Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠΌΠΈΠ½, ΠΈΠ»ΠΈ (2) ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π ΡΠ»ΡΡΠ°Π΅ (1) Π±Π»ΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΡΠΎΡΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ·Π»Π° (ΠΏΡΠΎΠ΄ΡΠΊΡΠ°) ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ·Π»Π° (ΡΠ΅ΡΠΌΠ°). Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ prod Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΠΏΠ°ΡΡΠ΅Ρ. ΠΠ°ΡΡΠ΅Ρ prim ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»Π΅Π²ΡΠ΅ ΠΈ ΠΏΡΠ°Π²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΠΌΠ° ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π±Π»ΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ, ΡΠΌ. ΡΠΈΡΡΠ½ΠΎΠΊ \(\PageIndex{5}\). ΠΠΎΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π° Π½Π° ΡΡΠΎΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅ ( ΡΠ΅ΡΠΌΠΈΠ½
), ΡΡΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ±ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π’Π΅ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ + ΠΈΠ»ΠΈ prod
. Π’Π΅ΡΠΌΠΈΠ½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π°
ΡΡΠΎΠΈΡ ΠΏΠ΅ΡΠ²ΡΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ + ΠΊΠ°ΠΊ ΡΠ°ΠΌΡΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅.
Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π½Π°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ Π²ΡΠ΅ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΌΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Ρ ΠΏΠ°ΡΡΠ΅ΡΠΎΠΌ end
Π² start
production:
start := term end.
ΠΠΎΡ ΠΈ Π²ΡΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Ρ ΠΏΠ°ΡΡΠ΅Ρ:
ΠΠΎΠ΄ \(\PageIndex{16}\) (Pharo): ΠΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°Ρ ΠΎΡΠ΅Π½ΡΠΈΠΊ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π½Π°ΡΠ°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·: '1 + 2 * 3'. β 7 Π½Π°ΡΠ°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·: '(1 + 2) * 3'. β 9Π ΠΈΡΡΠ½ΠΎΠΊ \(\PageIndex{4}\): ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ² term , prod ΠΈ prim , ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΠΊΠΎΠ΄Π΅ \(\PageIndex{15}\). Π ΠΈΡΡΠ½ΠΎΠΊ \(\PageIndex{5}\): ΠΠ±ΡΡΡΠ½ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ β ΡΡΠΎ ΡΠ΅ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΡΠΌΠΌΠΎΠΉ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. Π‘Π½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡ ΡΡΠΌΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΌΡΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ.