ã¬ã¯ãµãŒ/ããŒãµãŒã«ç¹å®ã®ãããã¯ã·ã§ã³ïŒã€ãŸãã空çœãšã³ã¡ã³ãã®ãããã¯ã·ã§ã³ïŒãç¡èŠããããã«æ瀺ã§ãããšäŸ¿å©ã§ããããããã°ãä»ã®ãã¹ãŠã®ãããã¯ã·ã§ã³ã«ã³ã¡ã³ã/空çœã®èš±å®¹å€ãæ£ãããå¿ èŠããªããªããŸãã ããããåå¥è§£æã«ã¯æ§æ解æãçµã¿èŸŒãŸããŠãããããããã¯äžå¯èœãªå ŽåããããŸããïŒ
ããããšãããããŸãã
åæããŸããã çŸæç¹ã§ãããè¡ãããã®ã¯ãªãŒã³ãªæ¹æ³ã¯ãããŸããïŒ
@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ãå ¥ãããšé ããããããªãã®ã§ãç§ã¯ããã調ã¹ããããããŸããã
çæãããããŒãµãŒã¯ã¢ãžã¥ãŒã«åŒã§ããããã åé¿çãšããŠãåçŽãªã¬ã¯ãµãŒãäœæãããã®åºåãå®éã®ã¬ã¯ãµãŒãžã®å ¥åãšããŠäœ¿çšããŸããäŸïŒ
elideWS.pegjsïŒ
s = inputïŒïŒwhitespaceCharacter / textCharacterïŒ*
{{
var result = "";
forïŒvar i = 0; i <input.length; i ++ïŒresult + = input [i];
çµæãè¿ããŸãã
}
whitespaceCharacter = [nt] {return ""; }
textCharacter = cïŒ[^ nt] {return c; }
ããããããã¯ç©ºçœãåºåãæåã§ããå Žåã«åé¡ãåŒãèµ·ãããŸã-èå¥åã®ããã«
ãã®åé¡ã«é »ç¹ã«ã¶ã€ãããŸãã
ããããåªããã¬ã¯ãµãŒãäœæããã®ã¯ç°¡åã§ã¯ãããŸããïŒæåã®ææ³ã®é©åãªãã£ã³ã¯ãè€è£œããŠãäžè²«æ§ã®ããã¬ã¯ãµãŒãäœæããããšãã§ããŸãïŒã
ç§ãèããŠããã®ã¯ãäžèŽãããã®ããªãå Žåã¯ãã€ã§ã代æ¿ãšããŠäœ¿çšã§ããã¹ãããã«ãŒã«ãå®çŸ©ã§ããããã«ããããšã§ãã ãã ããããã«ãããããŒãã¬ãŒã¯ã¯ã©ã¹ãå¿
èŠã«ãªããŸãã Floatsã䜿çšãã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æ¥ã«ã¯ã15:22ã§ãã¢ã³ãã¬ã€Neculauã®[email protected]ã¯æžããŸããïŒ
ãã®åé¡ã«é »ç¹ã«ã¶ã€ãããŸãã
ããããåªããã¬ã¯ãµãŒãäœæããã®ã¯ç°¡åã§ã¯ãããŸããïŒæåã®ææ³ã®é©åãªãã£ã³ã¯ãè€è£œããŠãäžè²«æ§ã®ããã¬ã¯ãµãŒãäœæããããšãã§ããŸãïŒãç§ãèããŠããã®ã¯ãäžèŽãããã®ããªãå Žåã¯ãã€ã§ã代æ¿ãšããŠäœ¿çšã§ããã¹ãããã«ãŒã«ãå®çŸ©ã§ããããã«ããããšã§ãã ãã ããããã«ãããããŒãã¬ãŒã¯ã¯ã©ã¹ãå¿ èŠã«ãªããŸãã Floatsã䜿çšããarithmetics.pegjsã®äŸ
è¡šçŸ
=æéïŒïŒ "+" / "-"ïŒæéïŒ*åŠæ
=ãã¡ã¯ã¿ãŒïŒïŒ "_" / "/"ïŒãã¡ã¯ã¿ãŒïŒ_èŠçŽ
= "ïŒ"åŒ "ïŒ"
/ æµ®ããããŒãããããŒãã
= "-"ïŒ ïŒ[0-9] +ïŒïŒ "ã"ïŒ[0-9] +ïŒ//ïŒã¹ãããã«ãŒã«ãäžèŽããªãããšãæå³ããŸã//ãïŒ=ãã§ããŒã¯ãããã«ãŒã«ãã¹ãããããŸã
//ã¹ãããã«ãŒã«ã¯ç©ºã®æååãšäžèŽã§ããŸãã
_ã空çœã
ïŒ= [tnr] +
ãŸã ãããæ¶åããŠããŸãã ãã£ãŒãããã¯ã¯ãããŸããïŒ éåžžã«æããªèããããããŸãããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
@waTeimå®éã«ã¯ãããŸããã
åŸæ¥ãæ§æ解æããã»ã¹ã¯åå¥è§£æãšæ§æ解æã«åå²ãããŠããŸããã åå¥è§£æäžã¯ã空çœãå«ããã¹ãŠã®æåãéèŠã«ãªããŸãã ãããããããã¯ãç Žæ£ãããŒã¯ã³ã«ãŸãšããããŸãã ããŒãµãŒã¯ã次ã®ããŒã¯ã³ã«é²ããšãã«ãç Žæ£ããŒã¯ã³ãç Žæ£ããŸãã éèŠãªã®ã¯ã空çœã ãã§ãªããäœã§ãç Žæ£ã§ããããšã§ãã ãã®åäœã¯ããŸãã«@andreineculauã説æããŠãããã®ã§ãã
ãããå®è£ ããæ¹æ³ã®åºæ¬çãªèãæ¹ã¯ãããç¶æ ãã次ã®ç¶æ ã«ç§»è¡ãããšãã«ããã¹ãŠã®ç Žæ£ã«ãŒã«ãè¿œå ã§ãã§ãã¯ããå¿ èŠãããããšã§ãã
2014幎4æ23æ¥ã«ã¯ã14:54ã§ãã·ã§ãŒã³ã»ãã¡ã¬ã«[email protected]ã¯æžããŸããïŒ
@waTeimå®éã«ã¯ãããŸããã
ã ããç§ãã¡ã¯åæããŸãã åŸæ¥ã®ã¢ãããŒãã§ååã§ãã æã£ãŠããå¿ èŠã¯ãããŸãã
å³å¯ã«è§£æãããéšåã¯ãç Žæ£ãããããŒã¯ã³ã®ååšãèªèãã
ã¬ã¯ãµãŒéšåãæ¡ä»¶ä»ãã§åäœãããçç±ã¯ãããŸããïŒç¶æ³äŸåã®æ¹æ³ã§ïŒ
ããŒã¯ã³ãèªèããwrtã
ãããã£ãŠãèšèªã«æ¥çèŠçŽ ïŒãïŒããªã©ïŒãå«ããå¿
èŠã¯ãããŸããã
ããã§ååã ãã
1ïŒããŒã¯ã³ã¯æ£èŠè¡šçŸããã®ã¿äœæã§ããç¶æ³äŸåã§ã¯ãããŸããã
2ïŒããŒã¯ã³ã¯ãäŸå€ãªãç Žæ£ããããã«ããŒã¯ã§ããŸãã
åŸæ¥ãæ§æ解æããã»ã¹ã¯åå¥è§£æãšæ§æ解æã«åå²ãããŠããŸããã åå¥è§£æäžã¯ã空çœãå«ããã¹ãŠã®æåãéèŠã«ãªããŸãã ãããããããã¯ãç Žæ£ãããŒã¯ã³ã«ãŸãšããããŸãã ããŒãµãŒã¯ã次ã®ããŒã¯ã³ã«é²ããšãã«ãç Žæ£ããŒã¯ã³ãç Žæ£ããŸãã éèŠãªã®ã¯ã空çœã ãã§ãªããäœã§ãç Žæ£ã§ããããšã§ãã ãã®åäœã¯ããŸãã«@andreineculauã説æããŠãããã®ã§ãã
ãããå®è£ ããæ¹æ³ã®åºæ¬çãªèãæ¹ã¯ãããç¶æ ãã次ã®ç¶æ ã«ç§»è¡ãããšãã«ããã¹ãŠã®ç Žæ£ã«ãŒã«ãè¿œå ã§ãã§ãã¯ããå¿ èŠãããããšã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
ããããŸãããããã§ã¯ç§ã¯ããªãã誀解ããŸããã ã¬ã¯ãµãŒç¶æ ã®å ŽåããããŸãããããã¯ãŸã£ããç°ãªãèŠä»¶ã§ãããIMHOã¯peg.jsã®ç¯å²å€ã§ãã
@ 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
空çœïŒIGNOREïŒ
= [t] +
ç§ãè¡ãè¿œå ã¯ãä»»æã®ãããã¯ã·ã§ã³ã«å«ãŸããå¯èœæ§ã®ãããªãã·ã§ã³ã»ã¯ã·ã§ã³ã§ã
2ïŒææ¡ãããïŒã«é¢ããç§ã®åé¡
亀æããŠããããã«æããŸãããŠãŒã¶ãŒã¯ããŒãµãŒã®å®çŸ©ããŸãšããŠå
¥åããå¿
èŠããããŸãã
éçµç«¯èšå·ïŒéåžžã¯ç©ºçœ/åºåãæåïŒãç Žæ£ãããŠãŒã¶ãŒã«å
¥åãèŠæ±ãã
ãããã®æåã¯ç Žæ£ãããªããã¡ã¿æåã®æãå«ãããŒãµãŒå®çŸ©
äžå¿
èŠã«ã 確ãã«ãããã¯çºçãå°ãªãã§ãããã ãŸããªã±ãŒã¹ã§ã
人ã
ã¯å®éã«åºåãæåãæ¶è²»ãããããã䜿ã£ãŠäœããããŸãããããŠç§ãã³ã¡ã³ãããããã«
3ïŒãŠãŒã¶ãŒå®çŸ©ã®ããŒãµãŒç¶æ
ããããããŒãµãŒããã¡ã€ããŒã§åçŽã«ã«ããã¢ã³ãããŒã¹ãããæ¹ãç°¡åã§ããããšãããããŸãã
å®çŸ©ããã®èšèªä»æ§ãªã®ã§ããã®ãããªãã®ãå¿
èŠãªå Žåã¯ã
ããã¯ãSeanã以åã«ã»ã®ããããããã«ãåå¥ç¶æ
ã§è¡ãããšãã§ããŸãã ç§ã¯ãããããã ãããšæããŸã
次ã®ããã«ã
production1ïŒstate == 1ïŒ
=ãã®
production2ïŒstate == 2ïŒ
=ãã®
çç£3
=ã¹ã¿ãã{ç¶æ
= 1}
çç£4
=ã¹ã¿ãã{ç¶æ
= 2}
èšãæããã°ãlex / yaccãšåãããã«ããããã¯ã·ã§ã³ã®ã¿ãå©çšã§ããããã«ããŸã
4ïŒãã®ä»ã®ãªãã·ã§ã³
ãŸãã¯ããŠãŒã¶ãŒã«ãšã£ãŠããç°¡åã«ãå¥ã®ãŠãŒã¶ãŒãšäžç·ã«èªè
ã«ããããããããããšãã§ããŸã
ãªãã·ã§ã³
ãããã¯ã·ã§ã³ïŒDONTIGNOREïŒ
=ãã®
ããã«ãããããŒãµãŒã¯ãããŒã¯ãããããŒã¯ã³ãç Žæ£ãããšããããã©ã«ãã®ã¢ã¯ã·ã§ã³ããªãŒããŒã©ã€ãã§ããŸãã
å»æ£ãšããŠããã ããã®1ã€ã®ãããã¯ã·ã§ã³ã«å¯ŸããŠã®ã¿ã ããã¯å®éã«ã¯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ïŒïŒreceived-protocol RWS receive-by [RWS comment]ïŒ
received-protocol = [ protocol-name "/" ] protocol-version
; see Section 6.7
received-by = ( uri-host [ ":" port ] ) / pseudonym
pseudonym = token
ããããããããã³ã«ããŒãžã§ã³ãã¯æ°åã§ãããããããæåã§ããããåä¿¡è
ãã¯æ°åãšæåã§ãã èšãæãããšã
åå¥è§£æããã°ã©ã ã¯ã空çœã§åºåãããŠããªãéããããã2ã€ã®éšåãæ£ããèªèããŸããã
å°ãªããšã1ã€ããªãå ŽåãRWSãæ瀺çã«èå¥ãããŠãããã©ããã«é¢ä¿ãªããæ§æãšã©ãŒã«ãªããŸãã
空çœæåã ãããã£ãŠãRWSããããã¯ã·ã§ã³ããå®å
šã«åé€ãã空çœãåŠçããã ãã§ãã
ã©ãã§ãåºåãæåãšããŠäœ¿çšãããèšèªã¯å€æŽãããŸãããææžåãããŠããæ¹æ³ã ãã§ãã
2014幎4æ24æ¥ã«ã¯ã13:23ã§ãã¢ã³ãã¬ã€Neculauã®[email protected]ã¯æžããŸããïŒ
@ waTeim @ riokiç§ã®ææ¡ã«ã€ããŠå°ãå¿ããŠãã ããã
å®è·µçã«ããã®ã«ãŒã«ãæ¡çšããŠãã ããã OWSãåãé€ããŠã«ãŒã«ã®ææ³ãåçŽåãããå Žåãfield_nameãšïŒã®éã§OWSãèš±å¯ããªãããã«PEGjsã«ã©ã®ããã«æ瀺ããŸããïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
@waTeimããªãã¯ããã§è¹å€ã«åºãŠãããšæããŸãã ç§ã¯ããªãã®æ°ã®ããŒãµãŒãäœæããŸããããã¬ã¯ãµãŒã¯ãã®ããã«å®éã«ã¯æ±ºããŠåœ¹ã«ç«ããªããšè¿°ã¹ãŠãããšæããŸãã ã»ãšãã©ã®å Žåãã¬ã¯ãµãŒããããã¯ã³ã¡ã³ããæ¶è²»ããå Žæã§ãããã¬ã¯ãµãŒãããããã¯ã³ã¡ã³ãã¢ãŒããã«ããŠããŠãŒããŒãã¿ãŒã³ãããåçŽãªãã¿ãŒã³ãèšè¿°ããŠã³ã¡ã³ãïŒããã³ã«ãŠã³ãè¡ïŒãæ¶è²»ããæ¹ããç°¡åãã§ããã
ããŒãµãŒã«èµ·å ããã¬ã¯ãµãŒç¶æ ã®é©åãªäœ¿çšãèŠãããšããããŸããã ããã§ã®åºæ¬çãªåé¡ã¯ãå ãèŠæ®ããŠãããŒãµãŒãç¶æ ãåãæ¿ããããŒã¯ã³ã確èªãããšãã«ãã¬ã¯ãµãŒããã§ã«æ¬¡ã®ããŒã¯ã³ã誀ã£ãŠåå¥è§£æããŠããããšã§ãã ããªããææ¡ããããšã¯ãããã¯ãã©ãã¯ãªãã§å®è£ ããããšã¯ã»ãšãã©äžå¯èœã§ãããããã¯ããŒãµãŒã®è¯ãæ©èœã§ã¯ãããŸããã
ææ³ãæžããšãã¯ãåºæ¬çã«ãã©ã®ãããã¯ã·ã§ã³ã解æããããšèŠãªãããäœãããããããšãã§ããããå®çŸ©ããŸãã @andreineculauã®äŸã§ã¯ãããŒãµãŒã§ç©ºçœãåŠçããããããŒã¯ã³ã®æ«å°Ÿã®ãïŒãéšåãå®çŸ©ãããã®2ã€ã®ãªãã·ã§ã³ããããŸãã ïŒ [a-zA-Z0-9!#$%&'+-.^_|~]+ ":"
ïŒã
åé¡ãããã©ãã¯ãªã¹ãã§ã¯ãªãããã¯ã€ããªã¹ãïŒãã£ããã£ããŠå€æããéšåïŒãæå®ããããã«å€æŽããããšããå§ãããŸãã 空çœã¯çŸåšã®ãã£ããã£ã·ã¹ãã ã®åé¡ã®1ã€ã§ãããã«ãŒã«ã®ãã¹ãã¯å¥ã®åé¡ã§ãã 第66å·ã§æžãããã
ãã£ããã£ã«é¢ããLPegãšPEG.jsã®ç°¡åãªäŸã«ã€ããŠã¯ãIssueïŒ66ã®ç§ã®ã³ã¡ã³ããåç §ããŠãã ããã ååã¯å°ããããã«ããã§ãããç¹å®ã®ãããã¯ã·ã§ã³ïŒãŸãã¯ãã®äžéšïŒããã£ããã£ãŸãã¯å€æããããŸããŸãªæ¹æ³ã«ã€ããŠã¯ãLPegããã¥ã¡ã³ãã®ããã£ããã£ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ããã«ã¡ã¯ãç§ã¯ããã€ãã®äžè¬çãªã±ãŒã¹ãç¡èŠããã¹ãããããäœæããŸãnull
ã undefined
ããã³ã¹ããŒã¹èšå·ã®ã¿ã®æååã
次ã®ããã«ãææ³ãã¡ã€ã«ã®å
é ã§å¿
èŠã«ãªãå ŽåããããŸãã
{
var strip = require('./strip-ast');
}
ãããæ¹åãã2ã€ã®æ¹æ³ïŒ
strip
åŸã®ç¬¬2段éã§å®è¡ã§ãããã¹ãããã空ã®é
åã®ããã©ãããããåé€ããŸãã@ richb-hanover ASN.1å®çŸ©ããŒãµãŒã®åãçµã¿ã¯ã©ãã«è¡ãçããŸãããïŒ
@ atesgoral-ç§ã¯ææžããŸããã ãå®éã®ããŒãµãŒãã¯å¿ èŠãããŸããã§ãããã¿ãŒã²ãããã¡ã€ã«å ã®ç¹å®ã®ååä»ãèŠçŽ ãåé¢ããã ãã§æžã¿ãŸããã
ã ããç§ã¯åŒ±è«ã®ç·ãããããšãããŸãã-æ£èŠè¡šçŸã䜿çšããŸããã ïŒãããŠç§ã¯2ã€ã®åé¡ãæ±ããŠããŸãã:-)
ããããããã§ããŸããã£ãã®ã§ã次ã®ãã£ã¬ã³ãžã«é²ãããšãã§ããŸããã ããªãã®ãããžã§ã¯ãã§é 匵ã£ãŠãã ããïŒ
ãã¡ãžã«ãšãã®ã¹ããããªãã·ã§ã³ãèŠãŠããã®ã§ããã®ãããªãã®ãéåžžã«æãŸããã§ãã
次ã®ãããªããšãæžããŠããããšããããããŸãã
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 -ãããŒããŒãåæ§ã®å¿ èŠæ§ãæ±ããŠããã«æ¥ãä»ãšèª°ã§ããç§ããç§èªèº«ã®ããŒãµãæžãããšã«ãªã£ãïŒ https://www.npmjs.com/package/asn1expãšHTTPSïŒ//www.npmjsã com / package / asn1-tree
ã¹ãããã¯ã es6 symbol
ã䜿çšããŠæ¯èŒçç°¡åã«å®è£
ã§ããŸãããŸãã¯ã解ææã«ããŒãµãŒã«è¿°èªãæž¡ãããšã§ãããæ°žç¶çã«å®è£
ã§ããŸãïŒåŸè
ã®ãªãã·ã§ã³ããå§ãããŸãïŒã
ããã«ãã€ãŸãããã
PEG.jsã®å
éšã«ã€ããŠäœãç¥ããªãã®ã§ãlemmeã¯ããã«éªšãæããŸã...
ã«ãŒã«ãäœæãããšãããã®æåŸã«ãªã¿ãŒã³ãããã¯ãè¿œå ã§ããŸãã
ãã®ãããã¯ã§ã¯ã text()
ãlocation()
ãããªãã®ãåŒã³åºãããšãã§ããŸãã ãããã¯å
éšæ©èœã§ãã
ã³ãŒãã®ã©ããã§ããã®ãããã¯ã®æ»ãå€ãåºåã¹ããªãŒã ã«å ¥ããŸãã
ã§ã¯ãã«ãŒã«ã«ãã£ãŠè¿ãããå€ãskip
ããŒã«ã«é¢æ°ã®åŒã³åºãã®æ»ãã§ããå Žåããã®å€ãã¹ããããããå ŽåãPEG.jsã§äœãå€æŽããå¿
èŠããããŸããïŒ
äŸïŒ comment = "//" space ([^\n])* newline { return skip() }
äžèšã®ããã«ãskipïŒïŒã¯Symbolãè¿ãå¯èœæ§ãããã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ã«ã€ããŠç§ãæ°ã«å ¥ã£ãç¹ã®1ã€ã¯ãã©ãã«ãäœæãããreturnã¹ããŒãã¡ã³ããå®è¡ãããããã«ãã£ãŒã«ããéžæããããã®ïŒææžåãããŠããªãïŒãµããŒãã§ãã ããã¯æ¬¡ã®ããã«ãªããŸãã
foo = <strong i="6">@bar</strong> _ <strong i="7">@baz</strong>
bar = $"bar"i
baz = $"baz"i
_ = " "*
parse('barbaz') // returns [ 'bar', 'baz' ]
ããã«ããããã®ãŠãŒã¹ã±ãŒã¹ã«å ããŠä»ã®å€ãã®ãŠãŒã¹ã±ãŒã¹ã«å¯ŸããŠãããŠãã§ã¯ãªãŒã³ãªæ瀺çãªæ§æãåŸãããããã«æããŸãã
æãåèã«ãªãã³ã¡ã³ã
@ atesgoral-ç§ã¯ææžããŸããã ãå®éã®ããŒãµãŒãã¯å¿ èŠãããŸããã§ãããã¿ãŒã²ãããã¡ã€ã«å ã®ç¹å®ã®ååä»ãèŠçŽ ãåé¢ããã ãã§æžã¿ãŸããã
ã ããç§ã¯åŒ±è«ã®ç·ãããããšãããŸãã-æ£èŠè¡šçŸã䜿çšããŸããã ïŒãããŠç§ã¯2ã€ã®åé¡ãæ±ããŠããŸãã:-)
ããããããã§ããŸããã£ãã®ã§ã次ã®ãã£ã¬ã³ãžã«é²ãããšãã§ããŸããã ããªãã®ãããžã§ã¯ãã§é 匵ã£ãŠãã ããïŒ