A leex and yecc example for the 2019-03 Montreal Elixir Meetup talk
This repo uses leex and yecc to tokenize and parse JSON file into a map.
See the full presentation here https://docs.google.com/presentation/d/1fMbJhD7CNCWylZJqvHioH_f_y7UA0qbmD_infIxLA-w/edit?usp=sharing
iex>json="{\"user\":{\"name\":\"Bobby Hill\", \"post_ids\": [1,2,3,4]}}""{\"user\":{\"name\":\"Bobby Hill\", \"post_ids\": [1,2,3,4]}}"iex>json|>LeexYeccExample.parse%{"user"=>%{"name"=>"Bobby Hill","post_ids"=>[1,2,3,4]}}iex>json='{"user":{"name":"Bobby Hill", "post_ids": [1,2,3,4]}}''{"user":{"name":"Bobby Hill", "post_ids": [1,2,3,4]}}'iex>{:ok,tokens,_}=json|>:lang.string{:ok,[{:open_curly,1,:"{"},{:string,1,"user"},{:colon,1,:":"},{:open_curly,1,:"{"},{:string,1,"name"},{:colon,1,:":"},{:string,1,"Bobby Hill"},{:comma,1,:","},{:string,1,"post_ids"},{:colon,1,:":"},{:open_array,1,:"["},{:int,1,1},{:comma,1,:","},{:int,1,2},{:comma,1,:","},{:int,1,3},{:comma,1,:","},{:int,1,4},{:close_array,1,:"]"},{:close_curly,1,:"}"},{:close_curly,1,:"}"}],1}iex>tokens|>:parse.parse{:ok,%{"user"=>%{"name"=>"Bobby Hill","post_ids"=>[1,2,3,4]}}}