λ μ/νμμκ² νΉμ μμ±(μ: 곡백 λ° μ£Όμ μμ±)μ 무μνλλ‘ μ§μν μ μμΌλ―λ‘ λ€λ₯Έ λͺ¨λ μμ±μ μ£Όμ/곡백 νμ©μ΄ μλ μ°λ κΈ°λ₯Ό λ²λ¦΄ νμκ° μκ² λ©λλ€. λ μ±μ΄ ꡬ문 λΆμκ³Ό ν¨κ» λ΄μ₯λμ΄ μκΈ° λλ¬Έμ μ΄κ²μ΄ λΆκ°λ₯ν μλ μμ΅λλ€.
κ°μ¬ν©λλ€
λμ. νμ¬μ΄ μμ μ μννλ κΉ¨λν λ°©λ²μ΄ μμ΅λκΉ?
@benekastah : νμ¬λ‘μλ κΉ¨λν λ°©λ²μ΄ μμ΅λλ€.
μ΄κ²μ PEG.jsμ μλ λ°©μμ λ³κ²½νμ§ μκ³ λ μννκΈ° μ΄λ €μΈ κ²μ λλ€. κ°λ₯ν μ루μ μ λ€μκ³Ό κ°μ΅λλ€.
μ§κΈμ μ΄ μμ μ νμ§ μκ² μ§λ§ κΈ°λ₯μμ μκ°ν΄ λ³Ό λ¬Έμ μ λλ€.
μ΄ κΈ°λ₯μ΄ νμν©λλ€.
"건λλ°κΈ°"-ν ν°μ μκ°ν μ μμ΅λλ€. λ°λΌμ κ·μΉμ΄ ν΄λΉ ν ν°μ λ°ννλ©΄ 무μλκ³ AST(λ°°μ΄μ νλͺ©μ΄λΌκ³ λ ν¨)μ λ Έλκ° μμ΅λλ€.
μ λ λ°©λ²μ μ°Ύκ³ μμ΅λλ€.
ν° λ¬Έλ² νμΌμ΄ μμ΅λλ€(SNMP MIB νμΌμ λν ASN.1 νμμ ꡬ문 λΆμν¨). μ κ° μ°μ§λ μμμ§λ§ PEG.jsμμ νμλ₯Ό λ§λ€κΈ° μν΄ μλ νμμμ μ¬μνκ² λ³ννμ΅λλ€. (μ’μ΅λλ€. μ¬μ€ PEG.jsκ° λ°μλ€μ΄λλ‘ μμ νλ λ° 15λΆλ μ± κ±Έλ¦¬μ§ μμμ΅λλ€.)
λΆννλ λ¬Έλ²μ 곡백과 μ£Όμμ λ§λ λ 무μν μ μλ κΈ°λ₯μΌλ‘ μμ±λμμ΅λλ€. κ²°κ³Όμ μΌλ‘ νμκ° κ³΅λ°±μ 첫 λ²μ§Έ λ°μμμ μ€μ§νκΈ° λλ¬Έμ μ€μ MIB νμΌμ μ²λ¦¬ν μ μμ΅λλ€.
λλ λͺ¨λ κ·μΉμ μ μ ν 곡백μ λͺ¨λ μ½μ ν μ μλλ‘ λ¬Έλ²μ μ΄ν΄ν΄μΌ νλ κ²μ κ±±μ νμ§ μμ΅λλ€(μ½ 126κ°μ νλ‘λμ μ΄ μμ΅λλ€...) μ΄κ²μ ν μ μλ λ€λ₯Έ λ°©λ²μ΄ μμ΅λκΉ?
μ£Όμ: λ¬Έλ²μ μμΌλ‘ μμ ν΄μΌ νλ κ²½μ° Google κ·Έλ£Ήμ€ λͺ©λ‘μ ν°μΌμ μλ λͺ κ°μ§ μ§λ¬Έμ λν λμμ μμ²νμ΅λλ€. http://groups.google.com/group/pegjs/browse_thread/thread/568b629f093983b7
κ°μ¬ν©λλ€!
Google κ·Έλ£Ήμ€μ μ¬λλ€μκ² κ°μ¬λ립λλ€. λλ λ΄κ° μνλ κ²μ ν μ μλλ‘ μΆ©λΆν μ 보λ₯Ό μ»μλ€κ³ μκ°νλ€.
νμ§λ§ PEG.jsμμ 곡백/μ£Όμμ μμ ν 무μν μ μλ κ²μΌλ‘ νμνμ¬ κΉ¨λν λ¬Έλ²μ ββμμ νλ λ° λͺ μκ°μ΄ κ±Έλ¦¬μ§ μλλ‘ νλ κΈ°λ₯μ μ λ§ κΈ°λνκ³ μμ΅λλ€... κ°μ¬ν©λλ€!
λΆμ
λλ pegjsκ° ν ν°μ 건λλΈ μ μλ κΈ°λ₯μ΄ νμνλ€λ μ£Όμ₯μ λμν©λλ€. μ§μ§ν λ¬Έλ²μ ββμμ±νκ³ μΆλ€λ©΄ λͺ¨λ ν ν° μ¬μ΄μ wsλ₯Ό λ£μ λ λ―Έμ³λ²λ¦΄ κ²μ λλ€.
μμ±λ νμλ λͺ¨λμμ΄κΈ° λλ¬Έμ λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ λ¨μν λ μλ₯Ό λ§λ€κ³ κ·Έ μΆλ ₯μ for-realμ λν μ λ ₯μΌλ‘ μ¬μ©νμμμ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€.
elideWS.pegjs:
s = μ
λ ₯:(곡백문μ/ν
μ€νΈλ¬Έμ)*
{
λ³μ κ²°κ³Ό = "";
for(var i = 0;i < input.length;i++) κ²°κ³Ό += μ
λ ₯[i];
λ°ν κ²°κ³Ό;
}
whitespaceCharacter = [ nt] { λ°ν ""; }
textCharacter = c:[^ nt] { return c; }
νμ§λ§ κ³΅λ°±μ΄ κ΅¬λΆ κΈ°νΈμΌ λ λ¬Έμ κ° λ°μν©λλ€. μλ₯Ό λ€μ΄ μλ³μμ κ²½μ°
μ΄ λ¬Έμ μ μμ£Ό λΆλͺνλλ€.
κ·Έλ¬λ μ’μ λ μλ₯Ό μμ±νλ κ²μ μ½μ§ μμ΅λλ€(μ΄κΈ° λ¬Έλ²μ μ’μ λ©μ΄λ¦¬λ₯Ό 볡μ νμ¬ μΌκ΄λ λ μλ₯Ό κ°μ§ μ μμ).
λ΄κ° μκ°ν κ²μ μΌμΉνλ νλͺ©μ΄ μμ λλ§λ€ λμμΌλ‘ μ¬μ©ν μ μλ 건λλ°κΈ° κ·μΉμ μ μν μ μλ€λ κ²μ
λλ€. μ΄κ²μ κ·Έλ¬λ non-breaking ν΄λμ€μ λν νμμ±μ μκ°ν©λλ€. λΆλ μμμ μ μ¬μ©νλ arithmetics.pegjs
μ
= Term (("+" / "-") Term)*
Term
= Factor (("*" / "/") Factor)*
Factor
= "(" Expression ")"
/ Float
Float "float"
= "-"? # [0-9]+ # ("." # [0-9]+) // # means that skip rules cannot match
// skip rule marked by "!="
// skip rules cannot match the empty string
_ "whitespace"
!= [ \t\n\r]+
μμ§ μν μ€μ λλ€. μ무 νΌλλ°±? μμ£Ό μ΄λ¦¬μμ μκ°μΌ μλ μμ΅λλ€.
λ°λΌμ μ°¨μ΄μ μ μ 체 μμ§μ΄
λ μ λͺ¨λ(κ³΅λ°±μ΄ μ€μν¨)μμ μλνκ³ κ·Έλ μ§ μμ λ(곡백μ
무μ).
λ μ λͺ¨λμμ 곡백μ 무μνκ³ μΆμ§ μμ κ²½μ°κ° μμ΅λκΉ?
μ΅μ
μΌλ‘? λλ λ°λλ‘ μ κ·μ μμ μμ§ μμ λ? λλ μλλΌκ³ μκ°νλ€.
λ€μμ λλ±ν κΉμ?
λ¨λ€
"-?[0-9]+("." [0-9]+)"
λλ κ·Έλ μ§ μμΌλ©΄ μΌλ°μ μΈ μ κ·μμ μ§μ λ° μΈλΆμμ μ²λ¦¬νλλ‘ νκ·Έλ₯Ό νμ₯ν©λλ€.
λ°μ΄νλ‘ λ¬ΆμΈ λ¬Έμμ΄(μ κ·μ ν¬ν¨) 곡백μ 무μλ©λλ€.
2014λ 4μ 19μΌ μ€ν 3μ 22λΆμ Andrei Neculau [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ΄ λ¬Έμ μ μμ£Ό λΆλͺνλλ€.
κ·Έλ¬λ μ’μ λ μλ₯Ό μμ±νλ κ²μ μ½μ§ μμ΅λλ€(μ΄κΈ° λ¬Έλ²μ μ’μ λ©μ΄λ¦¬λ₯Ό 볡μ νμ¬ μΌκ΄λ λ μλ₯Ό κ°μ§ μ μμ).λ΄κ° μκ°ν κ²μ μΌμΉνλ νλͺ©μ΄ μμ λλ§λ€ λμμΌλ‘ μ¬μ©ν μ μλ 건λλ°κΈ° κ·μΉμ μ μν μ μλ€λ κ²μ λλ€. μ΄κ²μ κ·Έλ¬λ non-breaking ν΄λμ€μ λν νμμ±μ μκ°ν©λλ€. Floatsλ₯Ό μ¬μ©νλ arithmetics.pegjsμ μ
νν
= κΈ°κ°(("+" / "-") κΈ°κ°)*μ©μ΄
= μΈμ(("_" / "/") μΈμ)_μμΈ
= "(" μ ")"
/ λ¨λ€νλ‘νΈ "νλ‘νΈ"
= "-"? # [0-9]+ # ("." # [0-9]+) // # 건λλ°κΈ° κ·μΉμ΄ μΌμΉν μ μμμ μλ―Έν©λλ€.// "!="λ‘ νμλ κ·μΉ 건λλ°κΈ°
// 건λλ°κΈ° κ·μΉμ λΉ λ¬Έμμ΄κ³Ό μΌμΉν μ μμ΅λλ€.
_ "곡백"
!= [tnr]+
μμ§ μν μ€μ λλ€. μ무 νΌλλ°±? μμ£Ό μ΄λ¦¬μμ μκ°μΌ μλ μμ΅λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
@waTeim μ¬μ€ μλλλ€.
μ ν΅μ μΌλ‘ νμ± νλ‘μΈμ€λ λ μ±κ³Ό νμ±μΌλ‘ λλ©λλ€. λ μ±νλ λμ 곡백μ ν¬ν¨ν λͺ¨λ λ¬Έμκ° μ€μν©λλ€. κ·Έλ¬λ μ΄κ²λ€μ "νκΈ°" ν ν°μΌλ‘ λ³νλ©λλ€. νμλ λ€μ ν ν°μΌλ‘ μ§νν λ νκΈ° ν ν°μ λ²λ¦½λλ€. μ€μν λΆλΆμ 곡백λΏλ§ μλλΌ λ¬΄μμ΄λ λ²λ¦΄ μ μλ€λ κ²μ λλ€. μ΄ λμμ μ νν @andreineculau κ° μ€λͺ νλ κ²μ λλ€.
μ΄λ₯Ό ꡬννλ κΈ°λ³Έ μμ΄λμ΄λ ν μνμμ λ€μ μνλ‘ μ νν λ λͺ¨λ νκΈ° κ·μΉμ λν΄ μΆκ°λ‘ νμΈν΄μΌ νλ€λ κ²μ λλ€.
2014λ 4μ 23μΌ μ€ν 2μ 54λΆμ Sean Farrell [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@waTeim μ¬μ€ μλλλ€.
κ·Έλμ μ°λ¦¬λ λμν©λλ€. μ ν΅μ μΈ μ κ·Ό λ°©μμΌλ‘ μΆ©λΆν©λλ€. κ°μ§ νμκ° μλ€
μ격νκ² νμ λΆλΆμ νκΈ°λ ν ν°μ μ‘΄μ¬λ₯Ό μΈμνκ³
λ μ λΆλΆμ΄ 쑰건λΆλ‘ λμνλλ‘ λ§λ€ μ΄μ κ° μμ΅λλ€(λ¬Έλ§₯μ λ―Όκ°ν λ°©μμΌλ‘)
wrt μΈμ ν ν°.
λ°λΌμ μΈμ΄μ κΈλ£¨ μμ(μ: '#')κ° νμνμ§ μμ΅λλ€.
κ·Έκ²μΌλ‘ μΆ©λΆνκΈ° λλ¬Έμ
1) ν ν°μ μ κ·μμμλ§ λ§λ€ μ μμΌλ©° 컨ν
μ€νΈμ λ―Όκ°νμ§ μμ΅λλ€.
2) ν ν°μ μμΈ μμ΄ νκΈ°λλλ‘ νμλ μ μμ΅λλ€.
μ ν΅μ μΌλ‘ νμ± νλ‘μΈμ€λ λ μ±κ³Ό νμ±μΌλ‘ λλ©λλ€. λ μ±νλ λμ 곡백μ ν¬ν¨ν λͺ¨λ λ¬Έμκ° μ€μν©λλ€. κ·Έλ¬λ μ΄κ²λ€μ "νκΈ°" ν ν°μΌλ‘ λ³νλ©λλ€. νμλ λ€μ ν ν°μΌλ‘ μ§νν λ νκΈ° ν ν°μ λ²λ¦½λλ€. μ€μν λΆλΆμ 곡백λΏλ§ μλλΌ λ¬΄μμ΄λ λ²λ¦΄ μ μλ€λ κ²μ λλ€. μ΄ λμμ μ νν @andreineculau κ° μ€λͺ νλ κ²μ λλ€.
μ΄λ₯Ό ꡬννλ κΈ°λ³Έ μμ΄λμ΄λ ν μνμμ λ€μ μνλ‘ μ νν λ λͺ¨λ νκΈ° κ·μΉμ λν΄ μΆκ°λ‘ νμΈν΄μΌ νλ€λ κ²μ λλ€.
β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
μ’μ, κ·ΈλΌ λ΄κ° λΉμ μ μλͺ» μ΄ν΄νμ΅λλ€. λ μ μνμ λν κ²½μ°κ° μμ μ μμ§λ§ μ΄λ μμ ν λ€λ₯Έ μꡬ μ¬νμ΄λ©° peg.js λ²μλ₯Ό λ²μ΄λ IMHOμ λλ€.
@waTeim @rioki μ μ μμ
μ΄ κ·μΉμ λ°λ₯΄μμμ€ . *WS
λ₯Ό μ κ±°νμ¬ κ·μΉμ λ¬Έλ²μ λ¨μννλ €λ©΄ field_name
μ :
μ¬μ΄μ field_name
*WS
νμ©νμ§ μλλ‘ PEGjs μ μ΄λ»κ² μ§μνκ² μ΅λκΉ?
@andreineculau λΉμ μ λ¬Έλ²μ 곡백μ λ―Όκ°νκΈ° λλ¬Έμ μ΄κ²μ μ μ©λμ§ μμ΅λλ€. νκΈ° ν ν°μ λ¬Έλ²μ μΌλΆ, μ νν μ΄ν λΆλΆμ΄ λ κ²μ
λλ€. μ¬κΈ°μ ν° λ¬Έμ κ° λ¬΄μμΈμ§ λͺ¨λ₯΄κ² μ΅λλ€. μ΄κ²μ μ΄λ―Έ 70λ
λμ μΆ©λΆν ν΄κ²°λμμ΅λλ€. λͺ¨λ μΈμ΄μλ 건λλΈ μ μλ κ³ μ ν ν ν°κ³Ό μ μ© κ°λ₯ν μμΉκ° μμ΅λλ€. 곡백과 μ£Όμμ μΈμ΄ μ μμ λ§μ λΆλΆμ΄λ©° λ°λΌμ λ¬Έλ²μ μΌλΆμ
λλ€. λλΆλΆμ μΈμ΄μμ 건λλΈ μ μλ ν ν°μ λ€λ₯Έ λͺ¨λ ν ν° μ¬μ΄μ μμ μ μμΌλ©° νκΈ° κ·μΉμ μ¬μ©νλ©΄ λͺ¨λ κ·μΉμ λν΄ expr = WS lit WS op WS expr WS ";"
λ₯Ό μμ±νλ κ²λ³΄λ€ ν¨μ¬ κ°λ¨ν©λλ€. 곡백 μ²λ¦¬κ° μλ Cμ κ°μ λ¬Έλ²μ μμν΄ λ³΄μΈμ.
νκΈ° κ·μΉμ pegjsλ‘ λ€μ ꡬμ±νλ κ²μ΄ μ½μ§ μλ€λ κ²μ μ΄ν΄νμ§λ§ κ·Έκ²μ΄ μΉμ°¬ν λ§ν λͺ©νκ° μλλΌλ μλ―Έλ μλλλ€.
μ€, λ¬΄λ£ μλ΅ μΉμ ! ν λ§μ΄ λ§μλ° λ무 κΈΈμ΄μ μ£μ‘ν©λλ€.
1) TL;DR μ¬λλ€μ μν΄ νκ·Έ μμλ₯Ό μΆκ° ν μ μλ€λ©΄ λ€μκ³Ό κ°μ΄ μμ±νμ κ²μ λλ€.
header_field
= field_name ":" field_value
곡백(무μ)
= [t]+
λ΄κ° μΆκ°ν κ²μ λͺ¨λ νλ‘λμ μ ν¬ν¨λ μ μλ μ΅μ μΉμ μ λλ€.
2) μ μλ #μ λν λμ λ¬Έμ
μ¬μ©μκ° νμ μ μλ₯Ό λ¬΄λ¦¬λ‘ μ±μ°λλ‘ μꡬνλ κ²κ³Ό κ΅ννλ κ²μ²λΌ λκ»΄μ§λλ€.
μ¬μ©μκ° μ±μ°λλ‘ μꡬνλ λΉ ν°λ―Έλ(μΌλ°μ μΌλ‘ 곡백/ꡬλΆμ) νκΈ°
"μ¬κΈ°μ μλ λ¬Έμλ λ²λ¦¬μ§ μμ΅λλ€" λ©ν λ¬Έμκ° ν¬ν¨λ νμ μ μ
λΆνμνκ². λ¬Όλ‘ μ΄λ° κ²½μ°λ λ μ μ κ²μ
λλ€. νλ κ²½μ°λ λλ¬Όλ€.
μ¬λλ€μ μ€μ λ‘ κ΅¬λΆ κΈ°νΈλ₯Ό μ¬μ©νκ³ κ΅¬λΆ κΈ°νΈλ‘ 무μΈκ°λ₯Ό μνν©λλ€.
3) μ¬μ©μ μ μ νμ μν
κ·Έλ¬λ νμ μ μμκ° λ¨μν μλΌλ΄μ΄ λΆμ¬ λ£λ κ²μ΄ μΌλ§λ μ¬μ΄μ§ μ μ μμ΅λλ€.
μ μμ μΈμ΄ μ¬μμ΄λ―λ‘ μ΄μ κ°μ κ²μ΄ μμ΄μΌ νλ κ²½μ°
μ΄κ²μ Seanμ΄ μμ μΈκΈν μ΄ν μνλ‘ μνν μ μμ΅λλ€. λ΄κ° ν κ² κ°μ
λ€μ λ°©λ²μΌλ‘.
μμ°1(μν==1)
= 물건
μμ°2(μν==2)
= 물건
μμ°3
= 물건 {μν = 1}
μμ°4
= 물건 {μν = 2}
μ¦, lex/yaccμ λ§μ°¬κ°μ§λ‘ νλ‘λμ μμλ§ μ¬μ©ν μ μμ΅λλ€.
4) λ λ§μ μ΅μ
λλ μ¬μ©μμκ² λ μ½κ² λ§λ€ μ μκ³ λ€λ₯Έ
μ΅μ
μμ°(DONTIGNORE)
= 물건
μ΄λ κ² νλ©΄ νμκ° νμλ ν ν°μ λ²λ¦¬λ κΈ°λ³Έ μμ
μ μ¬μ μν μ μμ΅λλ€.
νλμ μμ°μ λν΄μλ§ νκΈ°λ©λλ€. μ΄κ²μ 3κ³Ό λμΌνμ§λ§ λ μ½μ΅λλ€.
μ½λ€. μ΄κ²μ μμ°μ΄ λͺ¨λ 무μλκΈ° λλ¬Έμ # μ μλ³΄λ€ λ μ μ°ν©λλ€.
5) getNextToken()μ 맀κ°λ³μλ₯Ό μΆκ°νλ©΄ 컨ν μ€νΈ λ―Όκ°λκ° νμ©λ©λλ€.
λλ μ΄ λͺ¨λ κ²μ΄ νμ¬ (μ¬κΈ°μ λͺ κ°μ§ κ°μ μ νκ³ μμ΅λλ€.)
νμ λΆλΆμ΄ getNextToken(input)μ νΈμΆνκ³ λμ λ°μν΄μΌ νλ κ²μ λ€μμ μΆκ°νλ κ²μ
λλ€.
λΆλ‘ a) ν΄λΉ HTTP-bis μ¬μ
μ’μ, λλ λͺλͺμ μ½μμ§λ§ μ΄ λͺ¨λ κ²μ μ½μ§λ μμλ€
νμ΄νΌν
μ€νΈ μ μ‘ νλ‘ν μ½(HTTP/1.1): λ©μμ§ κ΅¬λ¬Έ λ° λΌμ°ν
λλννΈ-ietf-httpbis-p1-messaging-26
λλ κ·Έλ€μ΄ λ¬Έλ²μ μ μνλ λ°©μμ μ’μνμ§ μμ΅λλ€. μ
λ ₯μ λ³κ²½νμ§ μλ κ²μ΄ μ’μ΅λλ€.
μλ½νμ§λ§ λλ κ·Έλ€μ΄ ν κ²μ²λΌ μ μνμ§ μμμ κ²μ
λλ€. νΉν, λλ κ·Έλ€μ΄ μ
λͺ¨λ μ νν λμΌν λ¬Έμμ΄κ³Ό λμΌν μ μλ OWS λ° RWS λ° BWS
κ·Έλ¬λ λ€λ₯Έ λ§₯λ½μμ. κ·Έλ€μ μ μ
OWS ::== (SP | HTAB)*
RWS ::== (SP | HTAB)+
BWS ::== OWS
νκ³Ό 곡백μ λ°λ³΅μ λλ€.
μ΄μ κ° μμ΅λλ€. κ·Έλ€μ μΈμ΄λ₯Ό ꡬ문 λΆμνκΈ° μ΄λ ΅κ² λ§λ€μμ΅λλ€. μ΄ν λΆμκΈ°κ° νμν©λλ€.
컨ν
μ€νΈλ₯Ό μΆμ νκΈ° μν΄ - κ·Έλ¦¬κ³ κ·Έλ€μ κ·Έλ κ² ν νμκ° μμμ΅λλ€.
κ·Έλ€μ OWSλ₯Ό "μ νμ 곡백"μΌλ‘ μ μνμ΅λλ€. BWSλ "λμ 곡백" λλ κ·Έλ μ§ μμΌλ©΄ μ νμ μΈ κ²μΌλ‘ μ μνμ΅λλ€.
곡백μ΄μ§λ§ νμνμ§ μμ "λμ" 컨ν
μ€νΈμμ RWSλ κ³΅λ°±μ΄ νμν μμΉμ 곡백μ μꡬνμ΅λλ€.
ν ν°μ ꡬλΆνλ λ° νμν©λλ€. μλ§λ νμκ° μμ μ μλ€λ κ²μ μ μΈνκ³ μ΄ κ³΅λ°±μ μ΄λμλ μ¬μ©λμ§ μμ΅λλ€.
BWS("λΆνμν νν 곡백 κ°μ§" λ±)μ μΌμΉνλ κ²½μ° κ²½κ³
κ΅¬λΆ κΈ°νΈλ μ΄μ¨λ ν©λλ€.
κ·Έλ€μ μ¬μμμ RWSκ° μ¬μ©λλ μ μΌν μ₯μλ μ¬κΈ°μ λλ€.
Via = 1#( [ RWS μ£Όμ ]μ μν΄ μμ λ νλ‘ν μ½ RWS μμ )
received-protocol = [ protocol-name "/" ] protocol-version
; see Section 6.7
received-by = ( uri-host [ ":" port ] ) / pseudonym
pseudonym = token
κ·Έλ¬λ 'νλ‘ν μ½ λ²μ 'μ μ«μμ λ¬ΈμμΌ μ μλ λ°λ©΄ 'μμ μ'λ μ«μμ λ¬Έμμ
λλ€. λ€μ λ§ν΄,
μ΄ν λΆμκΈ°λ 곡백μΌλ‘ ꡬλΆνμ§ μλ ν μ΄ λ λΆλΆμ μ¬λ°λ₯΄κ² μΈμνμ§ λͺ»ν©λλ€.
κ·Έλ¦¬κ³ RWSκ° μ μ΄λ 1μ΄ μλ κ²½μ° λͺ
μμ μΌλ‘ μλ³λλ RWSκ° μκ±°λ μλ ꡬ문 μ€λ₯κ° λ κ²μ
λλ€.
곡백 λ¬Έμ. λ°λΌμ νλ‘λμ
μμ RWSλ₯Ό μμ ν μ κ±°νκ³ κ³΅λ°±μ μ²λ¦¬νμμμ€.
μ΄λμμλ ꡬλΆμλ‘ μ¬μ©λλ©° μΈμ΄λ λ³κ²½λμ§ μκ³ λ¬Έμνλ λ°©μλ§ λ³κ²½λ©λλ€.
2014λ 4μ 24μΌ μ€ν 1μ 23λΆμ Andrei Neculau [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@waTeim @rioki μ μ μμ
μ΄ κ·μΉμ λ°λ₯΄μμμ€. OWSλ₯Ό μ κ±°νμ¬ κ·μΉμ λ¬Έλ²μ λ¨μννλ €λ©΄ field_nameκ³Ό : μ¬μ΄μμ OWSλ₯Ό νμ©νμ§ μλλ‘ PEGjsμ μ΄λ»κ² μ§μνκ² μ΅λκΉ?
β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
@waTeim λλ λΉμ μ΄
νμμμ νμλ λ μ μνμ μ μ ν μ¬μ©μ λ³Έ μ μ΄ μμ΅λλ€. μ¬κΈ°μ κ·Όλ³Έμ μΈ λ¬Έμ λ νμκ° μνλ₯Ό μ ννκΈ° μν΄ ν ν°μ λ³Ό λ μ¬μ μ ν λ²λ§ λ³Ό λ λ μκ° μ΄λ―Έ λ€μ ν ν°μ μλͺ» λ μ±νλ€λ κ²μ λλ€. λΉμ μ΄ μ μν κ²μ μμΆμ μμ΄ κ΅¬ννλ κ²μ΄ κ±°μ λΆκ°λ₯νλ©° μ΄λ νμμμ κ²°μ½ μ’μ κΈ°λ₯μ΄ μλλλ€.
λ¬Έλ²μ μμ±ν λ κΈ°λ³Έμ μΌλ‘ μ΄λ€ μμ°λ¬Όμ΄ ꡬ문 λΆμλκ³ λ¬΄μμ λ§μ€ μ μλμ§ μ μν©λλ€. @andreineculau μ μμλ νμμμ 곡백μ μ²λ¦¬νκ±°λ ν ν°μ νν ":" λΆλΆμ μ μνλ λ κ°μ§ μ΅μ
μ΄ μμ΅λλ€. ( [a-zA-Z0-9!#$%&'+-.^_|~]+ ":"
).
λ¬Έμ λ₯Ό λΈλ리μ€νΈ λμ νμ΄νΈλ¦¬μ€νΈ(μ΄λ€ λΆλΆμ μΊ‘μ²νκ³ λ³ννκ³ μΆμμ§)λ₯Ό μ§μ νλλ‘ μ μν μ μμ΅λλ€. 곡백μ νμ¬ μΊ‘μ² μμ€ν μ ν κ°μ§ λ¬Έμ μ΄μ§λ§ κ·μΉμ μ€μ²©μ λ λ€λ₯Έ λ¬Έμ μ λλ€. λ΄κ° Issue #66μμ
μΊ‘μ²μ κ΄λ ¨νμ¬ LPegμ PEG.jsμ κ°λ¨ν μλ λ¬Έμ #66μ λ΄ μ견μ μ°Έμ‘°νμμμ€. μ΄λ¦μ΄ μ½κ° μ 맀νκΈ΄ νμ§λ§, μ£Όμ΄μ§ νλ‘λμ (λλ κ·Έ μΌλΆ)μ μΊ‘μ²νκ±°λ λ³νν μ μλ λ€μν λ°©λ²μ λν΄μλ LPeg λ¬Έμμ μΊ‘μ² μΉμ μ μ°Έμ‘°νμμμ€.
μλ
νμΈμ, null
, undefined
λ° κ³΅λ°± κΈ°νΈλ§ μλ λ¬Έμμ΄κ³Ό κ°μ μΌλ°μ μΈ κ²½μ°λ₯Ό 무μ νλ μ€λν« μ λ§λ€μμ΅λλ€.
λ€μκ³Ό κ°μ΄ λ¬Έλ² νμΌμ ν€λμ νμν μ μμ΅λλ€.
{
var strip = require('./strip-ast');
}
μ΄λ₯Ό κ°μ νλ λ κ°μ§ λ°©λ²:
strip
λ€μ λ λ²μ§Έ λ¨κ³μμ μνν μ μμΌλ©° μ€μ²©λ λΉ λ°°μ΄μ Β«νΌλΌλ―ΈλΒ»λ₯Ό μ κ±°ν©λλ€.@richb-hanover ASN.1 μ μ νμ λ Έλ ₯μ μ΄λμμ μ΄λ£¨μ΄μ‘μ΅λκΉ?
@atesgoral - νμΆνμ΅λλ€. "μ€μ νμ"κ° νμνμ§ μμμ΅λλ€. λμ νμΌμμ νΉμ λͺ λͺ λ μμλ§ λΆλ¦¬νλ©΄ λμμ΅λλ€.
κ·Έλμ λλ μ΄λ€ λ©μ²ν μ¬λλ ν μ μλ μΌμ νμ΅λλ€. μ κ·μμ μ¬μ©νμ΅λλ€. (κ·Έλ¦¬κ³ λ κ°μ§ λ¬Έμ κ°μμμ΅λλ€ :-)
νμ§λ§ μ±κ³΅νκΈ° λλ¬Έμ λ€μ λμ μΌλ‘ λμ΄κ° μ μμμ΅λλ€. νλ‘μ νΈμ νμ΄μ λΉλλ€!
chevrotainκ³Ό ν΄λΉ 건λλ°κΈ° μ΅μ μ
λ무 μμ£Ό μ°λ¦¬λ λ€μκ³Ό κ°μ΄ μ°κ³ μμ΅λλ€.
Pattern = head:PatternPart tail:( WS "," WS PatternPart )*
{
return {
type: 'pattern',
elements: buildList( head, tail, 3 )
};
}
λμ λ€μκ³Ό κ°μ΄ μμ±ν μ μλ€λ©΄ λ©μ§ κ²μ λλ€.
WS "whitespace" = [ \t\n\r] { return '@<strong i="11">@skipped</strong>' }
IgnoredComma = "," { return '@<strong i="12">@skipped</strong>' }
Pattern = head:PatternPart tail:( WS IgnoredComma WS PatternPart )*
{
return {
type: 'pattern',
elements: [head].concat(tail)
};
}
@richb-hanover, κ·Έλ¦¬κ³ λΉμ·ν μꡬ μ¬νμ μ°Ύμ μ¬κΈ°κΉμ§ μ¨ λ€λ₯Έ μ¬λλ€μ μν΄ λλ κ²°κ΅ λ΄ μμ μ νμλ₯Ό μμ±νκ² λμμ΅λλ€: https://www.npmjs.com/package/asn1exp λ° https://www.npmjs. com/package/asn1-tree
건λλ°κΈ°λ es6 symbol
μ¬μ©νμ¬ λΉκ΅μ μ½κ² ꡬννκ±°λ ꡬ문 λΆμ μ ꡬ문 λΆμκΈ°μ μ μ΄λ₯Ό μ λ¬νμ¬ λ μ€λ μ§μν μ μμ΅λλ€(νμμ μ΅μ
μ μ νΈν¨)
μ΄κ² μμ μ°μ°ν λ°κ²¬νμ΅λλ€.
PEG.jsμ λ΄λΆμ λν΄ μ무κ²λ λͺ¨λ₯΄κ³ , κ·Έλ₯ κ±°κΈ°μ λΌλ₯Ό λμ‘μ΅λλ€...
κ·μΉμ μμ±ν λ κ·μΉμ λμ λ°ν λΈλ‘μ μΆκ°ν μ μμ΅λλ€.
ν΄λΉ λΈλ‘μμ text()
λ° location()
μ κ°μ κ²μ νΈμΆν μ μμ΅λλ€. λ΄λΆ κΈ°λ₯μ
λλ€.
μ½λμ μ΄λκ°μ ν΄λΉ λΈλ‘μ λ°ν κ°μ΄ μΆλ ₯ μ€νΈλ¦ΌμΌλ‘ λ€μ΄κ°λλ€.
λ°λΌμ ν΄λΉ κ°μ΄ skip
λ‘컬 ν¨μ νΈμΆμ λ°νμΈ κ²½μ° κ·μΉμ μν΄ λ°νλ κ°μ 건λλ°λ €λ©΄ PEG.jsμμ 무μμ λ³κ²½ν΄μΌ ν©λκΉ?
μ: comment = "//" space ([^\n])* newline { return skip() }
μμμ μΈκΈν κ²μ²λΌ skip()μ Symbolμ λ°νν μ μμΌλ©°, κ·Έλ° λ€μ μ΄λκ°μμ μ½λμ μν΄ κ²μ¬λκ³ μ κ±°λ©λλ€.
lzhakiκ° λ§ν κ²κ³Ό λΉμ·νμ§λ§ λΌμ΄λΈλ¬λ¦¬ λ΄λΆ
λλ λΉμ μ μ§λ¬Έμ μ΄ν΄νμ§ λͺ»ν©λλ€. μ΄λ€ μν©μμ κ·μΉμ μ€ν¨νλ λ°©λ²μ μ°Ύκ³ μμ΅λκΉ? &{...}
λλ !{...}
ν©λλ€. κ·Έλ μ§ μμΌλ©΄ comment
κ·μΉμ λ°ν κ°μ μ¬μ©νμ§ λ§μμμ€.
seq = comment r:another_rule { return r; };
choice = (comment / another_rule) { <you need to decide what to return instead of "comment" result> };
λκ΅°κ°μκ² λμμ΄ λλ€λ©΄ μ΅μμ κ·μΉμ΄ κ²°κ³Ό λ°°μ΄μ νν°λ§νλλ‘ νμ¬ κ³΅λ°±μ 무μν©λλ€.
μμ:
= prog:expression+ {return prog.filter(a => a)}
expression
= float
/ number
/ whitespace
float
= digits:(number"."number) {return parseFloat(digits.join(""),10)}
number
= digits:digit+ {return parseInt(digits.join(""),10)}
digit
= [0-9]
whitespace
= [ \t\r\n] {return undefined}
μ΄κ²μ κ²°κ³Ό λ°°μ΄μμ 곡백μ μ μ§νλ©΄μ μ
λ ₯μ ν볡νκ² κ΅¬λ¬Έ λΆμν©λλ€.
μ΄κ²μ μ£Όμκ³Ό κ°μ κ²½μ°μλ μλν©λλ€. κ·μΉμ΄ μ μλμ§ μμ μνλ‘ λ°νλκ³ μ΅μμ κ·μΉμ΄ μ΄λ₯Ό κ±Έλ¬λ
λλ€.
μ΄λ μ΅μμ νλ‘λμ μμλ§ μλν©λλ€. νν°λ§ κ°λ₯ν μμμ ν¬ν¨ν μ μλ λͺ¨λ λΆλͺ¨λ₯Ό μλμΌλ‘ νν°λ§ν΄μΌ ν©λλ€.
@StoneCypher μ¬μ€, μΌλΆ μ΅μμ μμ μ΄ νμνμ§λ§ μ μκ² ν¨κ³Όμ μ΄λ©° κ°λ§κ° λ무 볡μ‘νμ§ μμ ν μ΅μμ νν°λ₯Ό μ¬μ©νμ¬ λ²μ΄λ μ μμ΄μΌ νλ€κ³ μκ°ν©λλ€.
κ·Έ μΈμ λ΄κ° μκ°ν μ μλ κ²μ μ λ ₯μμ 곡백μ νν°λ§νκ³ λͺ¨λ μΌμΉ νλͺ©μ ν΅κ³Όμν€λ μ΅μμ κΈ°λ₯μ΄ μλ€λ κ²λΏμ λλ€. νμ€ν λλ¦¬κ³ λ λ§μ νΈμΆμ΄ νμνμ§λ§ (λμ²λΌ) λͺ¨λ κ²μ ν ν° μμ±κΈ°μ μ λ¬νλ©΄ μ½μ΅λλ€. ν ν°μ μμ±ν κ³³μμ νν° κΈ°λ₯μ νΈμΆν μ μμΌλ©° ν ν° μμ±μ λν΄μλ§ κ±±μ νλ©΄ λ©λλ€. 곡백μ μ΄λ μ λ μλμΌλ‘ νν°λ§λ©λλ€.
pegjsμ νμ¬ HEADμμ λ΄κ° μ’μνλ κ² μ€ νλλ λ μ΄λΈμ μμ±νκ³ return λ¬Έμ μννμ§ μκ³ λ νλλ₯Ό μ ννλ (λ¬Έμνλμ§ μμ) μ§μμ λλ€. λ€μκ³Ό κ°μ΄ 보μ λλ€.
foo = <strong i="6">@bar</strong> _ <strong i="7">@baz</strong>
bar = $"bar"i
baz = $"baz"i
_ = " "*
parse('barbaz') // returns [ 'bar', 'baz' ]
λλ μ΄κ²μ΄ μ΄ μ¬μ© μ¬λ‘μ λ€λ₯Έ λ§μ μ¬λ‘μ λν΄ νλ₯νκ³ κΉ¨λνλ©° λͺ μμ μΈ κ΅¬λ¬Έμ μ 곡νλ€κ³ μκ°ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
@atesgoral - νμΆνμ΅λλ€. "μ€μ νμ"κ° νμνμ§ μμμ΅λλ€. λμ νμΌμμ νΉμ λͺ λͺ λ μμλ§ λΆλ¦¬νλ©΄ λμμ΅λλ€.
κ·Έλμ λλ μ΄λ€ λ©μ²ν μ¬λλ ν μ μλ μΌμ νμ΅λλ€. μ κ·μμ μ¬μ©νμ΅λλ€. (κ·Έλ¦¬κ³ λ κ°μ§ λ¬Έμ κ°μμμ΅λλ€ :-)
νμ§λ§ μ±κ³΅νκΈ° λλ¬Έμ λ€μ λμ μΌλ‘ λμ΄κ° μ μμμ΅λλ€. νλ‘μ νΈμ νμ΄μ λΉλλ€!