Git Product home page Git Product logo

typed-bnf-ocaml-demo's Introduction

Typed-BNF OCaml Demo

Typed-BNF helps you minimize the procedures of writing parsers.

Requirements for a parser library

  1. OCaml dune build system
  2. Typed-BNF compiler(Python 3.10 required)
  3. Opam libraries:
    • menhirLib
    • sedlex
    • sedlex.ppx

Dune project:

(library
 (name <your project name>)
 (libraries menhirLib sedlex sedlex.ppx)
 (preprocess
  (pps sedlex.ppx)))

Parser Construction Process

Writing a json parser library requires only 2 hand-written files:

  1. the grammar json.tbnf; or grammar for your own language xxx.tbnf.
  2. lib/json_require.ml(or your lib/xxx_require.ml), which provides the implementation of the external symbols you declared in json.tbnf(or your xxx.tbnf).

Then you build the project with tbnf and menhir with this bash script:

tbnf json.tbnf ocaml  --outdir lib/ --mod json
menhir lib/json_parser.mly --external-tokens Json_tokens

MLI_CONTENT="$(cat lib/json_parser.mli)"
echo "open Json_require;;" > lib/json_parser.mli
echo $MLI_CONTENT >> lib/json_parser.mli

Inserting open Json_require to the head of lib/json_parser.mli is a required patch for menhir codegen.

Running the parser

run dune utop ..

utop # Easyjson.Api.parse_json("{\"1\": 2,   \"3\": [1, 2]}");;
- : Json_require.json =
Easyjson.Json_require.Dict
 [([|<abstr>|], Easyjson.Json_require.Int 2);
  ([|<abstr>|],
   Easyjson.Json_require.List
    [Easyjson.Json_require.Int 1; Easyjson.Json_require.Int 2])]

typed-bnf-ocaml-demo's People

Contributors

thautwarm avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.