BuriKaigi 2024 https://burikaigi.dev/

ããã«ã¡ã¯ãããã§ããç§ã¯CRuby(ruby/ruby)ã®ã³ããã¿ããã£ã¦ããã®ã§ãããæè¿ã¯CRubyãã¡ã¤ã³ã®ã¿ã¼ã²ããã¨ãã¦LALR parser generator Lramaã®éçºããã¦ãã¾ãã ç¾å½¹ã®LALR parser generatoréçºè ã¨ãã¦ãæ¥é ç§ä»¥ä¸ã«LR parserã®ãã¨ãèãã¦ãã人ã¯ããã¯ããªãã§ãããã ãã®è¨äºãèªãã§ããçããã¯æ§æ解æããªãã§ãç¹ã«LR parserãç解ããããã«ãããããªæç§æ¸ãè¨äºãèªãã§ããã¨æãã¾ãã ä¸æ¹ã§ã©ããªã«èª¿ã¹ã¦ãã©ããè ã«è½ã¡ãªãé¨åãæ®ã£ã¦ããã®ã§ã¯ãªãã§ããããã LRæ§æ解æãåå¼·ããã¨æ§æ解æ表ã«åºä¼ãã¨ãããã¾ãã æ§æ解æ表ãä½ãæ¹æ³ãã®ãã®ã¯æç§æ¸ã«èª¬æãè¼ã£ã¦ããããã®éãã«æãåããã°ãã®ãããªè¡¨ãä½ããã¨ã¯ã§ããã§ãããã ã¾ãåºæ¥ä¸ãã£ãæ§æ解æ表ããã¨ã«å®éã«æ§æ解æããæé ãç解ã§
ãã¼ãµã»ã¸ã§ãã¬ã¼ã¿ã¨ã¯ å°ãè¤éãªææ³ ååï¼å æ¸ä¹é¤ï¼è¨ç®ã®BNF Racc ã§å®è£ ã¯ã©ã¹å®ç¾©ãBNFã®è¨è¿°é¨å ãããã¼ãã¤ã³ãã¼ãããã¿ã¼ ã³ã³ãã¤ã«ã¨å®è¡ æ¼ç®åã®åªå é ä½ã¨çµåã«ãããå·¦å³ã®åªå é ä½ ã¾ã¨ã ãã¼ãµã»ã¸ã§ãã¬ã¼ã¿ã¨ã¯ ãã¼ãµãæ¥æ¬èªã§ãæ§æ解æå¨ãã¨ããã¾ãã ãå¨ãã¨ã¨ãã£ã¦ããããã¤ããã§ã¯ãªããå¨æ¢°ããããé©åã«ã¯ã¢ããªã±ã¼ã·ã§ã³ã¾ãã¯ããã°ã©ã ã®ãã¨ã§ãã ã¤ã¾ããæ§æ解æãããããã°ã©ã ã§ãã ãæ§æ解æãã¨ã¯ããããã°ã©ã è¨èªãªã©ã®æ§æããã解æããããã¨ã§ãã ç°¡åãªä¾ã¨ãã¦ã足ãç®ãèãã¦ã¿ã¾ãããã 1+2 11+34 123+456 3ã¤ã®è¶³ãç®ã®ä¾ãããã¾ãã åºã¦ããæ°åã¯éããã®ã§ãããã©ãããæ°åï¼æ°åãã¨ãããã¿ã¼ã³ã¯å¤ããã¾ããã 3çªãã®æååã¯7ã¤ã®æåãããªã£ã¦ãã¾ãã 1, 2, 3, +, 4, 5, 6 ãã®7æåã¯
8/19ã«éå¬ãããRubyKaigi 2023 follow upã§ãRubyã®parserã¨parser generatorã«é¢ããé²æã¨ä»å¾ã®æ¹éã«ã¤ãã¦è©±ããã¦ãã¾ããã rhc.connpass.com å½æ¥ã®è³æã¯ãã¡ãã«ã¢ãããã¼ããã¦ããã¾ãã speakerdeck.com é²æã¨ããããã®è©± RubyKaigiã§ã®çºè¡¨ãè¸ã¾ãã¦3ã¤ã®ç¹ã«ã¤ãã¦RubyKaigiããã®é²æã¨ããããã®è©±ããã¾ããã Error-tolerant Universal Parser Maintainability Lramaã¨ã¯ github.com Rubyã§ããããLALR parser generatorã§ããBNFããã¼ã¹ã«ããDSL(parse.y)ãåãåã£ã¦ãCè¨èªå®è£ ã®LALR parserãçæãã¾ããç¾å¨ã®CRubyã¯Lramaãçæããparserã使ç¨ãã¦ãã¾ãã E
2023å¹´6æ15æ¥ã«ãæ·±æãRubyKaigi 2023 with spikeolaf & makenowjustããéå¬ãã¾ãããã¤ãã³ãã®å 容ãã»ã¼å ¨ææåèµ·ããå½¢å¼ã§ãå±ããã¾ãããã®è¨äºã¯ç¬¬2é¨ã§ãã hey.connpass.com ç»å ´äººç© ã²ã¹ã makenowjust/è¤æµª 大弥ãã spikeolaf/éå éä¸éãã STORES fujimura/è¤æ å¤§ä» shyouhei/åé¨ æå¹³ hogelog/å°å®¤ ç´ ãã¼ãµã¨ã®åºä¼ã fujimuraï¼éåããã®ãã¼ãã«ããã¾ããç°¡åã«ã©ããªè©±ãRubyKaigi 2023ã§ãããç´¹ä»ãã¦ããã ãã¾ãã§ããããï¼ spikeolafï¼ãã2å¹´ãããã主ã«And the Worldã£ã¦ããRubyKaigiã®åç©ã³ã³ãã³ããè¦ã¦ããã¨ããã¼ãµã¸ã®é¢å¿ã¨ããã®ã¯é«ã¾ã£ã¦ãã¦ãã¦ãããä½å¹´ãã§ä½ãåé¡ãã¯ã ãã¶æ´çããã¦ãã¦
æ¦è¦ åèè ã®è¨±è«¾ãå¾ã¦ç¿»è¨³ã»å ¬éãããã¾ãã è±èªè¨äº: Rewriting the Ruby parser | Rails at Scale åæå ¬éæ¥: 2023/06/12 åèè : Kevin Newton ãµã¤ã: Rails at Scale | The Ruby and Rails Infrastructure team at Shopify exists to help ensure that Ruby and Rails are 100-year tools that will continue to merit being our toolchain of choice. CC BY-NC-SA 4.0 Deed | 表示 - éå¶å© - ç¶æ¿ 4.0 å½é | Creative Commons æ¥æ¬èªã¿ã¤ãã«ã¯å 容ã«å³ãããã®ã«ãã¾ããã ãªããæ¬è¨äºã§ã¯ããã¼ãµã¼
Parser generators vs. handwritten parsers: surveying major language implementations in 2021 Developers often think parser generators are the sole legit way to build programming language frontends, possibly because compiler courses in university teach lex/yacc variants. But do any modern programming languages actually use parser generators anymore? To find out, this post presents a non-definitive s
At Shopify, we have spent the last year writing a new Ruby parser, which weâve called YARP (Yet Another Ruby Parser). As of the date of this post, YARP can parse a semantically equivalent syntax tree to Ruby 3.3 on every Ruby file in Shopifyâs main codebase, GitHubâs main codebase, CRuby, and the 100 most popular gems downloaded from rubygems.org. We recently got approval to merge this work into C
ååã®ãããã Ruby Parseréçºæ¥èª (7) - doã«ã¤ãã¦èãã - ãããã«ã£ã Rubyã®doã®ãã¤è¤éããä¸å¿ã«Maintainabilityã®æ¹åæ¹æ³ã«ã¤ãã¦èãã¾ãããPractical LR Parser Generationã§ç´¹ä»ããã¦ããNonterminal attributesã¨ããã¢ããã¼ãã«precedence(åªå 度)ãããã«çµã¿åããããã¨ã§ãlexerã®ç¶æ ã¨ãã¦ç®¡çãã¦ãããã®ãæ§æã«çµã¿è¾¼ããã¨ã«æåããã®ã§ããã ã¨ããã§Ruby Committers vs The Worldã®2022ã2021ãããããã¦ã¿ãã¨ãããã«æ¬¡ã®3ã¤ã解ãã¹ãåé¡ã ã¨è¨ããã¦ãã¾ãã Usability (Error-tolerant parser) Maintainability Universal Parser 1ã¨2ã«ã¤ãã¦ã¯ãã§ã«åæã¨å®è£ ããã¦ãã¾ã
ååã®ãããã Ruby Parseréçºæ¥èª (5) - Lrama LALR (1) parser generatorãå®è£ ãã - ãããã«ã£ã Error Recoveryãå®è£ ããããã«Lrama LALR (1) parser generatorãå®è£ ãã¾ããã Error Recoveryã«ã¤ãã¦ã¯ç®å¦ããã£ãã®ã§ä»åã¯parse.yã®Maintainabilityãããã«ãã¦æ¹åãããèãããã¨æãã¾ãã parse.yã®é£ãã Rubyã®parse.yã®é£ããã«ã¤ãã¦ã¯èã人ã«ãã£ã¦ç°ãªãåçãè¿ã£ã¦ããã¨ããã§ããããããã以ä¸ã®ããã«ã¾ã¨ãããã¨ãã§ããã¨æãã¾ãã ãã¡ã¤ã«ã®è¡æ°ãå¤ã shift/reduce conflictãreduce/reduce conflictæã«ä½ãèµ·ãã¦ãããåããã«ãã Bisonãåå§çãªè¨æ³ããæä¾ãã¦ããªãã®ã§å ¨ã¦ã®è¦åãæ¸
ååã®ãããã Ruby Parseréçºæ¥èª (4) - ãããã«ã£ã Error Recoveryã«é¢ããç解ãæ·±ã¾ããRubyã®parserã¸å®è£ ããããã«3ã¤ã®å®è£ æ¹æ³ãæ¤è¨ãã¾ããããã©ãããã¾ãç°¡åãªæ¹æ³ã§ã¯ããã¾ããã§ããããã®åé¡ã解決ããããã«LALR parser generatorãå®è£ ããã®ã§ä»åã¯ãã®ç´¹ä»ããããã¨ãããã¾ãã Lrama LALR (1) parser generator github.com ååæ¤è¨ããã¨ããBisonã使ã£ã¦Error RecoveryãRubyã«å®è£ ãã¦ããã®ã¯å°é£ãä¼´ãã¾ããããã解決ããããã«èªåã§parser generatorãå®è£ ããgeneratorããã³templateã®ä¸¡æ¹ãèªåã§ç®¡çããã¨ããæ¹æ³ãæãã¤ããã®ã§å®è£ ãã¾ããã ååã®ç±æ¥ Lramaã§ãªã£ãã¨èªã¿ã¾ããLALR parser genera
ã³ã³ãã¤ã©ã®æ§æ解æå¨ã«åºã使ç¨ããã¦ããLRæ§æ解æã®åçã解説ããï¼LRæ§æ解æã®åºç¤ããªãã¢ã¤ãã¢ã¯ï¼ãæ£è¦è¨èªã®è§£æææ³ãç¹°ãè¿ã使ãï¼æèèªç±ææ³ã®å¹ åºãã¯ã©ã¹ã解æãããã¨ãã(å¤ãã®åªããã¢ã¤ãã¢ãããã§ããããã«)åç´ãªãã®ã§ããï¼Knuthã¯ï¼ãã®ç´æçã§åç´ãªã¢ã¤ãã¢ãåºç¤ã¨ãï¼ç·»å¯ãªçè«çãªå±éã¨å·§ã¿ãªå®ç¨åæ¦ç¥ã«ãã£ã¦ï¼æ§æ解æã«ããããã¬ã¼ã¯ã¹ã«ã¼ãéæããï¼æ¬è§£èª¬ã§ã¯ï¼LRæ§æ解æãåºç¤ã¨ããã¢ã¤ãã¢ã«å³ãã¦ãã®åçã¨ã¢ã«ã´ãªãºã ã®æ§é ã解説ããï¼ããããç解ãããªãã°ï¼ä¸è¬ã«è¤éã§é£è§£ãªãã®ã¨åãåããã¦ããLRæ§æ解ææ³ã®å ¨ä½åã容æã«ç解ã§ããã¯ãã§ããï¼æ¬è§£èª¬ã§ã¯ï¼ãªã¼ãããã³ã®åºç¤ç¥èãæã¤ä¸è¬ã®èªè ãï¼LRæ§æ解æã®èãæ¹ã¨åçãç解ã§ãããã¨ãç®æãï¼
Error Tolerant parserã«é¢ããã¢ã¤ã㢠9æåã°ã«è¡ãããRubyKaigi 2022以æ¥ã3ã¶æãããError Tolerant parserã«ã¤ãã¦èª¿ã¹ããèãããå®è£ ãããããã¦ãã¾ãã éä¸ã§ããããããªã«ãã«ã¢ã¦ãããããã¦ããã¨ããã¨ããã¢ããã¤ã¹ãããã£ãã®ã§ãä»ç¾å¨ã®ç¶æ³ãèãã¦ãããã¨ãæ¸ãã¦ãããã¨æãã¾ãã Error Tolerant parserã¨ã¯? ã©ããã¦ããã欲ããã®? é常parserã¯ã¦ã¼ã¶ã¼ã®å ¥åãåãåã ãã®å ¥åããã®ããã°ã©ãã³ã°è¨èªã«ã¨ã£ã¦ãvalidãªãã®ãå¦ãããã§ã㯠validãªå ´åããã®å¾ã®å·¥ç¨ã«ã¨ã£ã¦é½åã®ãããã¼ã¿æ§é (ä¾ãã°AST)ã«å¤æããå¾å·¥ç¨ã«æ¸¡ã invalidãªå ´åãSyntax Errorãã¬ãã¼ããã ã¨ãã£ãå¦çãè¡ãã¾ãã ãããIDEãLSP(Language Server Proto
rubykaigi.org Rubyã®ãã¼ãµã¼ãæ¸ãç´ããã¨ããéå¿çãªããã¸ã§ã¯ããæã£ã¦ãã人ã®çºè¡¨ã§ãã ããã¸ã§ã¯ãã«å¯¾ããã¢ããã¼ã·ã§ã³ã«é¢ãã¦ã¯ãã¡ãã®ãã¤ã¼ãã®ã¹ã¬ãããè¦ãã®ãããã¨æãã¾ãã Since @yukihiro_matz mentioned it on stage at #rubykaigi... Yes! I'm going to be rewriting the Ruby parser. I'm super super excited about this, and you should be too! Below is a brief thread about how and why, but tl;dr: portability, error tolerance, and maintainability.â Kevin Newton (@kddnewt
Sorry, this post will read like a âdear diaryâ entry rather than some life-changing HN-worthy guidance. Back in November 2020, almost on a whim I started work on a new parser for the Ruby programming language. It was almost exactly a year after I had started working on my compiler project (I hope to write a longer post about that someday soon), and in my frustration with the state of affairs with
The Lezer Parser System The problem of parsing structured text has resisted one-size-fits all solutions for over 60 years. Lezer isn't such a solution either, but it is a very decent parser generator, especially well suited for use in code editors. Lezer (the Dutch word for reader, pronounced like âlaserâ) provides a parser generator that outputs JavaScript modules, which can be loaded to parse co
youtu.be RubyKaigi Takeout 2021 ã® Ruby Committers vs the World ã§è°é¡ã«ãªã£ããA maintainable, flexible, and usable Ruby parserãé¨åã ãå人çã«æ°ã«ãªã£ãã®ã§ã¾ã¨ãã¦ã¿ã*1ã A maintainable, flexible, and usable Ruby parserï¼ä¿å®æ§ãæè»æ§ã使ç¨æ§ã«åªãã Ruby ãã¼ãµã¼ï¼ Objective Make the parser easy to maintain Make the parser useful for LSP (VS Code/IDE) Problems The current parse.y is a hell LSP often requires more detailed syntax tree (concre
ã©ã³ãã³ã°
ãç¥ãã
ã©ã³ãã³ã°
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}