{"id":13783020,"url":"https://github.com/shekohex/jax","last_synced_at":"2025-05-08T23:34:11.963Z","repository":{"id":89445058,"uuid":"116667548","full_name":"shekohex/jax","owner":"shekohex","description":"minimal C-interpreter to play with. for learning purpose","archived":false,"fork":false,"pushed_at":"2018-01-09T17:31:08.000Z","size":53,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-31T19:21:31.155Z","etag":null,"topics":["c","functional-programming","jax","learning-by-doing","scripting-language"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shekohex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-01-08T11:19:30.000Z","updated_at":"2024-09-24T17:13:25.000Z","dependencies_parsed_at":"2024-01-07T23:09:28.046Z","dependency_job_id":"58dc4779-223b-419c-a0ac-808d493d14e5","html_url":"https://github.com/shekohex/jax","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/shekohex%2Fjax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekohex%2Fjax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekohex%2Fjax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shekohex%2Fjax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shekohex","download_url":"https://codeload.github.com/shekohex/jax/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253165564,"owners_count":21864458,"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":["c","functional-programming","jax","learning-by-doing","scripting-language"],"created_at":"2024-08-03T18:01:51.210Z","updated_at":"2025-05-08T23:34:11.930Z","avatar_url":"https://github.com/shekohex.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# Jax\n\nminimal C-interpreter to play with.\n![JAXLOGO](https://i.imgur.com/aMvkxnX.png \"JAX Logo\")\n\n## A Story\n\nOK, I was - *as You* - heedful about how compilers/interpreters works\nWhat's a VM ? Bytecode ! .\nAll these question comes to my head.\nAfter that I Would to say. It was so **COOL** to write a **VM** and an interpreter.\n\n## Project Structer\n\n```bash\n.\n├── build\n│   └── jax \u003c-- Binary\n├── Makefile\n├── src\n│   ├── glob.h \u003c-- Shared Bettween Project\n│   ├── lexer  \u003c-- Lexer , It will used to read the code and convert it to tokens\n│   │   ├── lexer.c\n│   │   ├── lexer.h\n│   │   ├── token.c\n│   │   └── token.h\n│   ├── main.c \u003c-- Main Program\n│   ├── parser \u003c-- It will parse tokens and Convert it into VM Instructions\n│   │   ├── parser.c\n│   │   └── parser.h\n│   ├── utils\n│   │   ├── debug.c\n│   │   └── debug.h\n│   └── vm \u003c-- It will execute Instructions\n│       ├── vm.c\n│       └── vm.h\n└── test\n    ├── math.jax\n    └── test.jax\n\n```\n\n### Prerequisites\n\nMake and GCC installed.\n\n### Building\n\n```bash\ngit clone https://github.com/shekohex/jax.git\ncd /jax\nmake build\n```\n\n## Why you should care about compiler theory?\n\nBecause it is **COOL**!\n\nAnd it is very useful. Programs are built to do something for us, when they are used to translate some forms of data into another form, we can call them compiler. Thus by learning some compiler theory we are trying to master a very powerful technique of solving problems. Isn't that cool enough to you?\n\nPeople used to say understanding how compiler works would help you to write better code. Some would argue that modern compilers are so good at optimization that you should not care any more. Well, that's true, most people don't need to learn compiler theory only to improve the efficency of the code. And by most people, I mean you!\n\n## Contributing\n\nThis Project was Just for Learning Purpose, but if you want to contribute\nyou are welcome with this project, just contact me or make a PR\n\n## Good Resources\n\n* [Let’s Build a Compiler](http://compilers.iecc.com/crenshaw/): a very good\n    tutorial of building a compiler for fresh starters.\n\n* [Lemon Parser Generator](http://www.hwaci.com/sw/lemon/): the parser\n    generator that is used in SQLite. Good to read if you want to understand\n    compiler theory with code.\n\n* [Write a C-interpreter](https://github.com/lotabout/write-a-C-interpreter/tree/master/tutorial/en) :  series of articles of a tutorials of building a C compiler from scratch.\n\n### Thanks to\n\n*  [Jinzhou Zhang](https://github.com/lotabout): Who made a great series of articles on how to write a C compiler from scratch.\n\n*   [Robert Swierczek](https://github.com/rswier) : created `c4` a C-interpreter in just four functions\n\nIn the end, I am human with a general level, there will be inevitably wrong\nwith the articles and codes(also my English). Feel free to correct me!\n\nHope you enjoy it.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshekohex%2Fjax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshekohex%2Fjax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshekohex%2Fjax/lists"}