# Monkey
Peelpreter is a interpreter for the language Monkey specified in the book `Writing an Interpreter in Go`.
It is not not designed to be the fastest implementation but instead a (mostly) readable one.
I, personally don't find encapsulating every little function of a program in classes to be particularly readable.
Hence, I have kept things bare-bone functions where I thought it made sense and used classes to encapsulate data like C-Structs
and sometimes to store methods.
### Monkey Features
Peelpreter supports all features of the canon implementation as well as some more.
They are:-
1. Variables
2. If expressions
3. First-Class Functions
4. Closures
5. Array
6. Hash Map (Dictionary)
7. Builtin Functions
8. Array and Hash mutability
9. Improved `puts` function
### Features Planned to be added
Some features which I wish for in a programming language are not present yet in this.
Suppport for them will be slowly added ~as soon as type annotations are improved for the existing code base~.
They are:-
~1. Input function~
~2. Type conversion~
3. Constants
4. Loops
5. Structs
6. Chaining variable assignments. E.g, `let x = y = 7`
7. Import System
8. Extension modules using Python
I might also added a Type Checker later on, but thats upto the future.
## Installation
For installation of the package run,
```
pip install peelpreter
```
Or if you would prefer to build and install yourself for a more up-to-date version, clone the repository and cd into it,
```
git clone https://github.com/GogiBoy102/Peelpreter.git
cd Peelpreter
```
then run,
```
python3 -m build
```
If `build` is not already installed onto the system then install it with,
```
pip install --upgrade build
```
After the build process ends, cd into `dist` and install the tar with,
```
cd dist
pip install peelpreter-<version>.tar.gz
```
And, voila! Peelpreter has been installed! For usage, follow the next section.
## Usage
Peelpreter comes with a script called `monkey` which is the entry point for the interpreter and also the reccomended way for it to be used.
Files in monkey usually have the extension ".mon".
`monkey`, when executed with no command line arguments starts the REPL for Monkey. However, it can also execute files if the path to those files are supplied as a command line argument.
The examples directory can be looked at for example programs writen in Monkey.
```
monkey (for starting a repl)
```
```
monkey /path/to/file (for running a file)
```
## License
Peelpreter is license under the GNU General Public License version 3 or above with it also being copyrighted by `Jeebak Samajdwar`
Raw data
{
"_id": null,
"home_page": null,
"name": "Peelpreter",
"maintainer": "Jeebak Samajdwar",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "monkey, interpreter, ast, treewalker, vm, programing language, language",
"author": "Jeebak Samajdwar",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/e8/f1/707f4373830680abc84cb8fdf91dfeb52bd9d7ea26e73b6b839d605c37d4/peelpreter-1.6.0.tar.gz",
"platform": null,
"description": "# Monkey\nPeelpreter is a interpreter for the language Monkey specified in the book `Writing an Interpreter in Go`.\nIt is not not designed to be the fastest implementation but instead a (mostly) readable one. \nI, personally don't find encapsulating every little function of a program in classes to be particularly readable.\nHence, I have kept things bare-bone functions where I thought it made sense and used classes to encapsulate data like C-Structs\nand sometimes to store methods.\n\n### Monkey Features\nPeelpreter supports all features of the canon implementation as well as some more.\nThey are:-\n1. Variables\n2. If expressions\n3. First-Class Functions\n4. Closures\n5. Array\n6. Hash Map (Dictionary)\n7. Builtin Functions\n8. Array and Hash mutability\n9. Improved `puts` function\n\n### Features Planned to be added\nSome features which I wish for in a programming language are not present yet in this.\nSuppport for them will be slowly added ~as soon as type annotations are improved for the existing code base~.\nThey are:-\n~1. Input function~\n~2. Type conversion~\n3. Constants\n4. Loops\n5. Structs\n6. Chaining variable assignments. E.g, `let x = y = 7`\n7. Import System\n8. Extension modules using Python\n\nI might also added a Type Checker later on, but thats upto the future.\n\n## Installation\nFor installation of the package run,\n```\npip install peelpreter\n```\nOr if you would prefer to build and install yourself for a more up-to-date version, clone the repository and cd into it,\n```\ngit clone https://github.com/GogiBoy102/Peelpreter.git\ncd Peelpreter\n```\nthen run,\n```\npython3 -m build\n```\nIf `build` is not already installed onto the system then install it with,\n```\npip install --upgrade build\n```\nAfter the build process ends, cd into `dist` and install the tar with,\n```\ncd dist\npip install peelpreter-<version>.tar.gz\n```\nAnd, voila! Peelpreter has been installed! For usage, follow the next section.\n\n## Usage\nPeelpreter comes with a script called `monkey` which is the entry point for the interpreter and also the reccomended way for it to be used.\n\nFiles in monkey usually have the extension \".mon\".\n\n`monkey`, when executed with no command line arguments starts the REPL for Monkey. However, it can also execute files if the path to those files are supplied as a command line argument.\nThe examples directory can be looked at for example programs writen in Monkey.\n```\nmonkey (for starting a repl)\n```\n```\nmonkey /path/to/file (for running a file)\n```\n\n## License\nPeelpreter is license under the GNU General Public License version 3 or above with it also being copyrighted by `Jeebak Samajdwar`\n\n",
"bugtrack_url": null,
"license": "GPL",
"summary": "A interpreter written in Python for the language, Monkey",
"version": "1.6.0",
"project_urls": {
"Repository": "https://github.com/GogiBoy102/Peelpreter"
},
"split_keywords": [
"monkey",
" interpreter",
" ast",
" treewalker",
" vm",
" programing language",
" language"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e8f1707f4373830680abc84cb8fdf91dfeb52bd9d7ea26e73b6b839d605c37d4",
"md5": "23e47aaa5a3c3cbe28b371d411db8d88",
"sha256": "22ad2dc5b54383ddfeb1097357676cdebffd9418f211208e93beb560a3ecfbbe"
},
"downloads": -1,
"filename": "peelpreter-1.6.0.tar.gz",
"has_sig": false,
"md5_digest": "23e47aaa5a3c3cbe28b371d411db8d88",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 28476,
"upload_time": "2024-06-11T17:36:07",
"upload_time_iso_8601": "2024-06-11T17:36:07.581080Z",
"url": "https://files.pythonhosted.org/packages/e8/f1/707f4373830680abc84cb8fdf91dfeb52bd9d7ea26e73b6b839d605c37d4/peelpreter-1.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-11 17:36:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "GogiBoy102",
"github_project": "Peelpreter",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "peelpreter"
}