[HN Gopher] Visual programming with Elixir: Learning to write bi...
       ___________________________________________________________________
        
       Visual programming with Elixir: Learning to write binary parsers
       (2019)
        
       Author : Dowwie
       Score  : 80 points
       Date   : 2023-03-31 10:08 UTC (1 days ago)
        
 (HTM) web link (hansonkd.medium.com)
 (TXT) w3m dump (hansonkd.medium.com)
        
       | codesnik wrote:
       | some errors there.                 head = 0x00       piece =
       | <<0x01, 0x01, 0x01, 0x01, 0x01>>       << head,             #
       | When a variable is already referenced it must be equal for the
       | pattern to match          piece,            # Match a string
       | rest :: binary >> # You can mix matching variables and assigning
       | new variables.
       | 
       | it should have ^head, and ^piece (the term is "pinning"). Unlike
       | in erlang, elixir will happily "reassign" variables to the new
       | content on whatever is on a right side of the match.
        
       | codesnik wrote:
       | I sometimes ponder, how much effort it would take to make a
       | similar matching interface not for binaries but for regexps
       | and/or something grammar-like. After structured matching of
       | binaries regexps in elixir just feel awkward.
       | 
       | It wouldn't work well with other matching constructs, though, if
       | matching is baked into beamvm itself as a core instruction for
       | speed or something. Guess I have something to investigate this
       | evening.
        
         | bmitc wrote:
         | It's not Elixir, but you might be interested in F#'s active
         | patterns, particularly the parameterized active patterns:
         | https://learn.microsoft.com/en-us/dotnet/fsharp/language-ref...
         | 
         | F#'s active patterns allow you to extend the built-in pattern
         | matching to other things, and in this case, you can have
         | patterns that return regular expression matches.
        
         | pmarreck wrote:
         | You could probably write a regex parser in pure Elixir
        
       | quikoa wrote:
       | https://archive.is/2rwPv
        
         | Nezteb wrote:
         | You can also replace `medium.com` with `scribe.rip` to get a
         | much friendlier frontend: https://hansonkd.scribe.rip/building-
         | beautiful-binary-parser...
        
           | quikoa wrote:
           | Interesting, I didn't know about that one, thanks!
        
             | gen_greyface wrote:
             | i have a bookmarklet for this. love that it formats the
             | github embeds quite nicely too.                 javascript:
             | (()=>window.location.href="https://scribe.rip"+location.pat
             | hname)()
        
       | dugmartin wrote:
       | If you are interested in learning about text (not binary) parsing
       | in Elixir check out the nimbleparsec library:
       | 
       | https://hexdocs.pm/nimble_parsec/NimbleParsec.html
       | 
       | I was able to write a very succinct parser for woodworking (using
       | imperial fractions) in around 38 lines of commented code. It
       | parses strings like 0.25 or 2 or 1/4 or 1/4" or 1' 2 3/4" and
       | pops out an integer or float in inches.
       | 
       | I had never used a parser combinator library before but I have
       | written many recursive descent parsers over the years. I was a
       | little surprised when I added the `debug: true` option and saw
       | the shear amount of code it generated. That probably could be
       | reduced by refactoring my combinators.
        
         | geekodour wrote:
         | i am interested in knowing what is woodworking here
        
       ___________________________________________________________________
       (page generated 2023-04-01 23:00 UTC)