ΠΡΠ»ΠΎ Π±Ρ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΠΏΡΡΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ.
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅ΠΉ;
<strong i="7">@include</strong> "expression.pegjs"
(or <strong i="8">@from</strong> "expression.pegjs" import expression)
tag_if
= "if" space? expression space? { ... }
<strong i="9">@import</strong> "expression.pegjs" as expr
tag_if
= "if" space? expr.expression space?
Π ΠΈΠ΄Π΅Π°Π»Π΅ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ .pegjs, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ parse () Π½Π° ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅;
Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ options
;
parse(input, startRule)
->
parse(input, { startRule: "...", startPos : 9000 })
Π Π² ΠΊΠΎΠ½ΡΠ΅, Π΅ΡΠ»ΠΈ startPos != 0 && result !== null
, ΠΌΡ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π΄ΠΎΡΠ»ΠΈ Π»ΠΈ ΠΌΡ Π΄ΠΎ input.length
, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ endPos (Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π·Π½Π°Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ. - ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ options?).
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π°, ΡΡΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½ΡΠΌΠΈ Π°ΡΠΏΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅Π»ΠΎΠΌ.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π²Π°ΠΆΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Ρ Ρ ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π²Π΅ΡΡΠΈΠΈ 1.0.
(ΠΡΡΠ°ΡΠΈ, ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ Python-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ - ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅Π΅ Π½Π° require
Node.js Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΠΊΠΎΠΌΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ JavaScript. ΠΠΎ ΡΡΠΎ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠΆΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅.)
ΠΡ Π±Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 1.0, Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ Π±ΡΠ» ΡΠ½Π°Π±ΠΆΠ΅Π½ ΠΏΠ°ΡΡΠ΅ΠΌ?
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ Π²Π°ΡΠΈΠΌ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Python.
+1 Π·Π° ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
@ceymard ΠΠ°, Ρ Π±Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π» ΡΡΠΎ.
+1 Π·Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈ +1 Π·Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΠ»Ρ require
@dmajda @ceymard Π£ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΌΡΡΠ»ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ? ΠΠ½Π΅ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ΅ ΠΈ Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎΠΏΡΠΎΡ Π² ΡΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ ΡΡΠΎ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΡΠ΅ΠΌ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π² Π½ΠΎΠ²ΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅.
@Dignifiedquire Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ Π΄ΡΠΌΠ°Ρ ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
static-languages.pegjs
langauges = "C" / "C++" / "Java" / "C#"
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ-languages.pegjs
languages = "Ruby" / "Python" / "JavaScript"
all-languages.pegjs
static = require("./static-languages")
dynamic = require("./dynamic-languages")
all = static.languages / dynamic.languages
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» .pegjs
Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² Π½Π΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ <name> = require(<module>)
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. Π’ΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
ΠΡΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Node.js. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ². Π― Π²ΠΈΠΆΡ Π΄Π²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°:
<name> = require(<module>)
ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΡ
ΠΎΠΆΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±ΠΈΠ²Π°ΡΡ Ρ ΡΠΎΠ»ΠΊΡ (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ)..
ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ .
, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«Π»ΡΠ±ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌΒ». ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ΄Π»ΠΈΠ²ΡΡ
ΠΏΡΠΈΠ΅ΠΌΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, .
ΠΎΠΊΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»Β», Π° .
ΠΎΠΊΡΡΠΆΠ΅Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°) ΠΈΠ»ΠΈ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° any
Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Β«Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°Β»).@dmajda ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ <identifier> = <expression>
ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ», ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
static := require("./static-languages")
dynamic := require("./dynamic-languages")
all = static::languages / dynamic::languages
::
Π½ΠΈΠ³Π΄Π΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π² PEG.js Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ. Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½ Π½Π°ΡΡΠ΅Ρ :=
ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ, Π½ΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΠΆΠ΄ΡΠΌ Javascript ..
Π’Π°ΠΊΠΆΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΡΡΠΈΡΠ°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
static := {
languages = "C" / "C++" / "Java" / "C#"
}
dynamic := {
languages = "Ruby" / "Python" / "JavaScript"
}
Π― Π½Π΅ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊ ::
ΠΈ :=
, ΠΎΠ½ΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΡΠΆΠΈΠΌΠΈ Π² ΠΌΠΈΡΠ΅ javaScript / CoffeeScript.
Π― ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅Π» Π±Ρ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Ρ ΡΠ°ΠΉΠ»Ρ. ΠΠ΅ Π²ΠΈΠΆΡ Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΡΠ΅ΠΌ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΌ.
ΠΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎ:
<strong i="6">@require</strong> foo = "./foo"
bar = foo:languages
ΠΠ²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ - ΡΡΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ : C ++, C #, XML ΠΈ Ρ. Π.
:
Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ cons
Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
, ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ². Π― ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π΄Π΅ΡΠΆΠ°ΡΡΡΡ ΠΏΠΎΠ΄Π°Π»ΡΡΠ΅ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ::
. Π Π°Π·Π²Π΅ ΡΡΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ C ++? Π― Π΅ΡΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ .
- ΡΠΎΠΆΠ΅ ΠΏΠ»ΠΎΡ
ΠΎΠΉ Π²ΡΠ±ΠΎΡ.
.
Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅.
::
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² C ++ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΈ Π² C # Π΄Π»Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, global::System
).
Π― Π΄ΡΠΌΠ°Π» ΠΎ Π±ΡΡΡΡΠΎΠΌ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ - ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ - ΡΠΊΠ»Π΅ΠΉΡΠ΅ ΡΠ°ΠΉΠ»Ρ pegjs Π²ΠΌΠ΅ΡΡΠ΅, ΡΠΎΡ ΡΠ°Π½ΠΈΠ² Π²ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ°ΠΏΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ, Π½ΠΎ, Π³Π»ΡΠ΄Ρ Π½Π° ΡΠ²Π΅ΡΠ»ΡΡ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡ Π²Π°Ρ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ DRY ΠΈ OTW.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ, Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅ΠΌΡ, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ, Ρ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ
languages = static__languages / dynamic__languages
<static-languages.pegjs>
<dynamic-languages.pegjs>
/* alternative */
languages = STATIC__languages / DYNAMIC__languages
@andreineculau Π― Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠΆΠ΅ Π΄Π΅Π»Π°Ρ ΡΡΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠ΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΈΠ· Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ Ρ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Π³Π΄Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ), Ρ ΠΌΠΎΠ³ Π±Ρ ΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠΎ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ, ΠΈ ΠΎΡΠΏΡΡΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ Π±ΠΎΡΠΎΡΡΡΡ Ρ ΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π²Π΅ΡΡ: ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΡΠΎΠΌΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΡΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΡΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΠΎ-ΡΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Ρ Π²ΡΠ΅Ρ Π½Π°Ρ Π΅ΡΡΡ Π·ΡΠ΄ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ (Π΄ΡΡΠ³Π°Ρ - ΡΡΠ½ΠΎΡΡΡ), - ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ ΠΎΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ, ΡΡΠΎΠ±Ρ Π΄Π΅ΡΠ΅Π²ΠΎ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ. ΠΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π°Π±ΠΎΡ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΡΡ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π½ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π΄ΡΠ²Π°Π½ΠΈΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
@odonnell +1 Π·Π° Π²ΡΠΏΡΡΠΊ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ - Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π»ΠΈ Ρ Π²Π°Ρ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΎΡΠΈΡΡΠΈΡΡ
ΠΈ +1 Π·Π° ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΡ. ΠΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
@odonnell, ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΡΡΠΎ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° https://github.com/andreineculau/core-pegjs - ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠΊΠ½ΠΈΡΠ΅ ΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»ΡΡΡΠ΅.
+1 Π·Π° ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
: +1:
: +1:
: +1:
Π― ΠΏΠΎΡΠ΅Π» ΠΈ Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ»Π°Π³ΠΈΠ½ / ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ PEG.js, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡ: https://github.com/casetext/pegjs-import.
+1 Π·Π° ΡΡΠΎ ΡΠΎΠΆΠ΅.
Π― ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΡΡΠΎ Π² # 308 Π² ΠΎΠ±ΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅: Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ - ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ.
ΠΡΠ»ΠΈΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ: +1:
Π‘ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΄Ρ Π΅Π³ΠΎ Π²ΡΡ ΠΎΠ΄Π°.
: +1:
ΠΠΎΡΡΡΡΠ°ΡΡΠΈΠΉ! : +1:
@dmajda Π― ΠΎΠΏΠ°Π·Π΄ΡΠ²Π°Ρ Π½Π° ΡΡΡ Π²Π΅ΡΠ΅ΡΠΈΠ½ΠΊΡ, Π½ΠΎ ΠΌΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π― Ρ
ΠΎΡΠ΅Π» Π±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ Url
ΠΈ Email
Π² ΠΌΠΎΠΈ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ, Π½ΠΎ ΠΌΠ΅Π½Ρ Π½Π΅ Π²ΠΎΠ»Π½ΡΠ΅Ρ, ΡΡΠΎ Url
ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ HierarchicalPart
ΠΈ AsciiLetter
. ΠΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΡΠΏΠΎΡΡΠ° Node ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ ΠΏΡΡΠ΅ΠΌ, ΡΠΎΡ
ΡΠ°Π½ΡΡΡΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΌ ΠΏΡΡΠΌΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ?
import { SchemalessUrl, Url } from "./Urls.pegjs"
Token
= PhoneNumber
/ Url
/ SchemalessUrl
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π΄Π»Ρ ΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΡΠ°ΡΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°ΡΡ ΠΈΠ½Π°ΡΠ΅. Π― Π·Π°ΡΡΡΡΠ» ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°ΠΉΠ»Ρ Π² ΡΠ°ΠΉΠ»Ρ ΠΈ Π½Π°Π·ΡΠ²Π°Ρ Π²Π΅ΡΠΈ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΈ Π½Π°Π·Π²Π°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ PHP Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½: UrlIpHost
, HtmlQuotedString
ΠΈ Ρ. Π.
@dmajda @futagoza
ΠΡΡΡ Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ? ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π΄ΠΈΡΠΊΡΡΡΠΈΡ, ΠΆΠΈΠ²ΡΡΠ°Ρ ΡΠ΅ΠΉΡΠ°Ρ Π½Π° # 473?
ΠΠΎΠΉ ΡΠ°ΠΉΠ» Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ ΡΠ°ΡΡΠ΅Ρ :(
ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
Π― Π±Ρ Π½Π΅ ΠΏΡΠΎΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΠΎ ΡΠΏΡΠΎΡΡΠΈΠ»ΠΎ Π±Ρ ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ Π±Ρ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ? ΠΡΠΎΡΡΠΎ ΠΌΡΡΠ»ΠΈ.
ΠΡΠΈΠΌΠ΅Ρ JavaScript, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΎΠ»Π΅Π΅ 1300 ΡΡΡΠΎΠΊ. ΠΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, Π³Π΄Π΅ Π²ΡΠ΅ Π±ΡΠ»ΠΎ, ΠΏΡΡΠ³Π°ΡΡ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ.
@mikeaustin Π― ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΡΡ ΡΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° Node.JS required
:
ΠΊΠΎΡΠΊΠ° bash.pegjs
{
const _ = require ("ΠΏΡΠΎΠ±Π΅Π»");
const LB = require ("line_break");
const CodeBlock = require ("code_block");
const BoolExpr = require ("Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅_Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅");
}
...
IfStatement = "if" _ "[" BoolExpr "]" _ ";" _ "ΡΠΎΠ³Π΄Π°" LB? CodeBlock "ΡΠΈ"
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ
- ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ:
1- ΠΏΠΎΠ΄Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ?
2- ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΈΠΌΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ?
ΠΠΠ, Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠΌ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ PEG.js (Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ PEG.js), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, @load (anotherGrammarFileLocation)), ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΡΡΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ javacsript / peg.js,
ΡΠΎΠ·Π΄Π°ΡΡ reg-exp ΠΈΠ»ΠΈ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ "anotherGrammarFile Location", ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² PEG.js
integers=[0-9]* {return parseInt(text())}
arrayOfInteger="["(integers ",")* integers"]"
@load("integers.pegjs")
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ» @load ΠΏΠ΅ΡΠ΅Π΄ "arrayOfInteger", peg.js ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΠΎ (ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½Π°Ρ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ°)
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π½ΠΎΠ²ΠΎΠΌΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΡΡΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π°.
Π― ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²ΡΠ·Π°Π½Π° Ρ Π·Π°ΠΏΡΠΎΡΠΎΠΌ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° / ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ - ΡΡΠΎ ΡΠΎ, ΡΠ΅Π³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΡΠΈΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΠ΅ Π²Π΅ΡΡ ΡΠΏΠ΅ΠΊΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 1 ΡΡΡ. Π‘ΡΡΠΎΠΊ, ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ Π΅Π΅ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΈΡΠ°Π΅ΡΠ΅ Π½ΡΠΆΠ½ΡΠΌ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ°ΡΠΈΠ²Π°ΡΡ Π΅Π΅ Π² pegjs.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@Dignifiedquire Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ Π΄ΡΠΌΠ°Ρ ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
static-languages.pegjs
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ-languages.pegjs
all-languages.pegjs
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ»
.pegjs
Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² Π½Π΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ<name> = require(<module>)
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. Π’ΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.ΠΡΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Node.js. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ². Π― Π²ΠΈΠΆΡ Π΄Π²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°:
<name> = require(<module>)
ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±ΠΈΠ²Π°ΡΡ Ρ ΡΠΎΠ»ΠΊΡ (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ)..
ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«Π»ΡΠ±ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌΒ». ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ΄Π»ΠΈΠ²ΡΡ ΠΏΡΠΈΠ΅ΠΌΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,.
ΠΎΠΊΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»Β», Π°.
ΠΎΠΊΡΡΠΆΠ΅Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°) ΠΈΠ»ΠΈ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°any
Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Β«Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°Β»).