Code Monkey home page Code Monkey logo

Comments (3)

yhirose avatar yhirose commented on June 26, 2024 1

Hello! I am the author of cpp-peglib, and glad to find you get to try it out.

I'll give you some background of this library for your information, since this PEG library is somewhat unique compared to other PEG libraries.

As you may have already noticed, this library is good for parser prototyping, since its grammar format is just plain text and we can develop grammar by trail and error with lint tools (peglint command line tool and playground web application) without compiling.

cpp-peglib also has simple built-in AST generation support. The default AST node can be enhanced easily with your own data. Although it produces a pretty redundant AST tree as default, you can remove unnecessary nodes with ignore operator ~ and AstOptimizer to make it good shape.

Another feature that cpp-peglib provides is infix expression support. This is not a part of the original PEG spec, but it's pretty useful to handle infix expression with many precedence levels.

Of course, a parser generated from cpp-peglib cannot be any better than hand crafted parsers in many respects. But I believe it can at least save your time during early stage of language design until the language syntax settles down, then shift to a product version of a hand written parser for performance and good error handling.

Anyway, thanks for your interest in cpp-peglib, and hope it helps your project!

P.S. I apologize if this comment shouldn't have been posted here.

from verona.

rengolin avatar rengolin commented on June 26, 2024

@yhirose, thanks for the feedback! Most welcome.

Our use of cpp-peglib is exactly as you describe. We're writing a prototype, to quickly build an AST that we can use from an evolving language. Once it becomes more stable, we'll have to write a custom parser, but hopefully retaining the AST mostly intact, so that we don't impact the other parts of the compiler.

from verona.

rengolin avatar rengolin commented on June 26, 2024

After a long time, most of the old syntax is changing and we have enough of the new syntax in the MLIR generator that we can mark this one "done". If we find missing parts in the language support (of which there are many), we can create new issues on each one specifically.

from verona.

Related Issues (20)

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.