{"id":19743377,"url":"https://github.com/jpenuchot/poacher","last_synced_at":"2025-04-30T07:32:41.822Z","repository":{"id":44887134,"uuid":"317597305","full_name":"JPenuchot/poacher","owner":"JPenuchot","description":"poacher: C++ compile-time compiling experiments","archived":false,"fork":false,"pushed_at":"2024-10-21T22:34:31.000Z","size":2643,"stargazers_count":6,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-25T01:56:09.998Z","etag":null,"topics":["brainfuck","compilation","cpp","cpp20","cpp23","metaprogramming","parser"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JPenuchot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-01T16:13:28.000Z","updated_at":"2024-10-21T22:34:34.000Z","dependencies_parsed_at":"2024-01-10T10:56:57.031Z","dependency_job_id":"9741c628-31dc-4e06-9ed5-ae25a15c95ac","html_url":"https://github.com/JPenuchot/poacher","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JPenuchot%2Fpoacher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JPenuchot%2Fpoacher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JPenuchot%2Fpoacher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JPenuchot%2Fpoacher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JPenuchot","download_url":"https://codeload.github.com/JPenuchot/poacher/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251660818,"owners_count":21623311,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["brainfuck","compilation","cpp","cpp20","cpp23","metaprogramming","parser"],"created_at":"2024-11-12T01:36:52.408Z","updated_at":"2025-04-30T07:32:41.501Z","avatar_url":"https://github.com/JPenuchot.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `poacher`\n\nC++ compile-time compiling experiments.\n\n## Objectives\n\nExploring arbitrary eDSLs in C++20, from parsing to codegen.\n\nPoacher used to be a project aiming towards a compile-time parser generator that\nworks in constexpr functions, but this need is almost fulfilled by\n[ctpg](https://github.com/peter-winter/ctpg). Several issues remain and make the\nctpg incompatible with constexpr functions, but I'm also working on fixing that.\n\nYet I'm still working on handmade parsers (such as the Brainfog parser that is\nfully functional), data structures for ASTs, ways to go from value-based data\nto type-based data, etc.\n\nFor the record, here's the previous \"objectives\" narrative that was written a\nwhile ago:\n\n`constexpr` computation is all the rage in post-C++17 world. Works by\n[Hana Dusikova](https://github.com/hanickadot) on compile-time regular\nexpressions and some great pioneering by [Jason Turner and Ben Deane](\nhttps://github.com/lefticus/constexpr_all_the_things/tree/master/src/include)\nshow that parsing arbitrary data or langages from compile-time available\nstrings is a very valuable technique.\n\nPoacher has the goal to provide an extensible framework to easily define such\nconstexpr parsers for arbitrary langages and to provide some well known\nlangages ready-to-use compile time parsers.\n\nOur goal is to implement a constexpr parser generator for LR(1) grammars. Such\ngrammars can express complex languages such as OCaml, Haskell, or any other\nlanguage recognized by a parser generated by programs such as Yacc, Menhir, or\nHappy.\n\n## Requirements\n\n- [C'est](https://github.com/pkeir/cest)\n\n## References\n\n- [A totally constexpr standard library - Paul Keir, Joel Falcou et al - Meeting C++ 2022](\n  https://www.youtube.com/watch?v=ekFPm7e__vI)\n- [Constexpr All The Things](\nhttps://github.com/lefticus/constexpr_all_the_things)\n- [Jean Privat's courses on compiling \u0026 LR(1) parsing](\nhttps://info.uqam.ca/~privat/INF5000/)\n- [ctpg](https://github.com/peter-winter/ctpg)\n- [Dragon Book](https://suif.stanford.edu/dragonbook/)\n\n## Discuss\n\nHead over to our [Discord](https://discord.gg/mtn8dmB5qP) and don't hesitate\nto mention me (@JPenuchot) if you have any question regarding the project.\n\n## Licensing\n\n\u003eTODO\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpenuchot%2Fpoacher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjpenuchot%2Fpoacher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpenuchot%2Fpoacher/lists"}