mirror of
https://github.com/Alvin-Zilverstand/sloppatron.git
synced 2026-03-06 02:57:27 +01:00
bingbong
This commit is contained in:
76
languages/custom/bingbong/README.md
Normal file
76
languages/custom/bingbong/README.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# BingBong 2.0
|
||||||
|
|
||||||
|
BingBong is a minimalist, esoteric programming language designed to be as simple and difficult to use as possible. This new version of BingBong is a binary representation of Python code.
|
||||||
|
|
||||||
|
## Language Elements
|
||||||
|
|
||||||
|
The BingBong language consists of only two commands:
|
||||||
|
|
||||||
|
* `.` (dot): Represents a `0` in the binary representation of the code.
|
||||||
|
* `,` (comma): Represents a `1` in the binary representation of the code.
|
||||||
|
|
||||||
|
## Execution Model
|
||||||
|
|
||||||
|
The interpreter reads the BingBong source code, converts the `.` and `,` characters to a binary string, decodes the binary string into a UTF-8 string, and then executes the resulting string as Python code.
|
||||||
|
|
||||||
|
**Warning:** The interpreter uses `exec()` to run the decoded Python code. This is a powerful but potentially dangerous function. Only run BingBong code from sources you trust.
|
||||||
|
|
||||||
|
## Interpreter
|
||||||
|
|
||||||
|
The language is interpreted by the `bingbong_interpreter.py` script.
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
To run a BingBong program, execute the interpreter from your command line and pass the path to your source file as an argument:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python bingbong_interpreter.py your_program.bb
|
||||||
|
```
|
||||||
|
|
||||||
|
## Converter
|
||||||
|
|
||||||
|
A helper script, `py_to_bingbong.py`, is provided to convert standard Python code into the BingBong format.
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
To convert a Python file (`.py`) to a BingBong file (`.bb`), run the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python py_to_bingbong.py your_python_script.py
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a new file with the same name but with the `.bb` extension.
|
||||||
|
|
||||||
|
### Example Workflow
|
||||||
|
|
||||||
|
1. Create a Python file named `hello.py` with the following content:
|
||||||
|
|
||||||
|
```python
|
||||||
|
print("Hello, BingBong 2.0!")
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Convert it to a BingBong file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python py_to_bingbong.py hello.py
|
||||||
|
```
|
||||||
|
|
||||||
|
3. This will generate a `hello.bb` file with a long sequence of `.` and `,` characters.
|
||||||
|
|
||||||
|
4. Run the BingBong file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python bingbong_interpreter.py hello.bb
|
||||||
|
```
|
||||||
|
|
||||||
|
5. The output will be:
|
||||||
|
|
||||||
|
```
|
||||||
|
--- Executing Decoded Python Code ---
|
||||||
|
Hello, BingBong 2.0!
|
||||||
|
--- Execution Finished ---
|
||||||
|
```
|
||||||
|
|
||||||
|
## Philosophy
|
||||||
|
|
||||||
|
The design philosophy of BingBong is to explore the limits of simplicity in programming language design, while intentionally creating a cumbersome and difficult-to-master tool. It serves as a thought experiment and a challenge for programmers who enjoy working with esoteric languages.
|
||||||
39
languages/custom/bingbong/bingbong_interpreter.py
Normal file
39
languages/custom/bingbong/bingbong_interpreter.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
def interpret_bingbong(source_code):
|
||||||
|
"""
|
||||||
|
Interprets a string of BingBong source code by converting it from a
|
||||||
|
binary representation to a Python script and executing it.
|
||||||
|
"""
|
||||||
|
binary_string = source_code.replace('.', '0').replace(',', '1')
|
||||||
|
|
||||||
|
# Ensure the binary string has a valid length for UTF-8 conversion
|
||||||
|
if len(binary_string) % 8 != 0:
|
||||||
|
print("Error: The length of the binary string must be a multiple of 8.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
byte_array = bytearray(int(binary_string[i:i+8], 2) for i in range(0, len(binary_string), 8))
|
||||||
|
python_code = byte_array.decode('utf-8')
|
||||||
|
|
||||||
|
print("--- Executing Decoded Python Code ---")
|
||||||
|
# WARNING: exec() is used here, which can be dangerous. Only run trusted BingBong code.
|
||||||
|
exec(python_code)
|
||||||
|
print("--- Execution Finished ---")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"An error occurred during execution: {e}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print("Usage: python bingbong_interpreter.py <source_file>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
source_file = sys.argv[1]
|
||||||
|
try:
|
||||||
|
with open(source_file, 'r') as f:
|
||||||
|
source_code = f.read()
|
||||||
|
interpret_bingbong(source_code)
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Error: File not found at '{source_file}'")
|
||||||
|
sys.exit(1)
|
||||||
1
languages/custom/bingbong/example.bb
Normal file
1
languages/custom/bingbong/example.bb
Normal file
@@ -0,0 +1 @@
|
|||||||
|
... ,,.
|
||||||
1
languages/custom/bingbong/hello.bb
Normal file
1
languages/custom/bingbong/hello.bb
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.,,,.....,,,..,..,,.,..,.,,.,,,..,,,.,....,.,.....,...,..,..,....,,..,.,.,,.,,...,,.,,...,,.,,,,..,.,,....,......,....,..,,.,..,.,,.,,,..,,..,,,.,....,..,,.,,,,.,,.,,,..,,..,,,..,.......,,..,...,.,,,...,,......,....,..,...,...,.,..,
|
||||||
1
languages/custom/bingbong/hello.py
Normal file
1
languages/custom/bingbong/hello.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
print("Hello, BingBong 2.0!")
|
||||||
33
languages/custom/bingbong/py_to_bingbong.py
Normal file
33
languages/custom/bingbong/py_to_bingbong.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def python_to_bingbong(python_code):
|
||||||
|
"""
|
||||||
|
Converts a string of Python code into its BingBong binary representation.
|
||||||
|
"""
|
||||||
|
byte_array = python_code.encode('utf-8')
|
||||||
|
binary_string = ''.join(f'{byte:08b}' for byte in byte_array)
|
||||||
|
bingbong_code = binary_string.replace('0', '.').replace('1', ',')
|
||||||
|
return bingbong_code
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print("Usage: python py_to_bingbong.py <python_file>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
python_file = sys.argv[1]
|
||||||
|
try:
|
||||||
|
with open(python_file, 'r') as f:
|
||||||
|
python_code = f.read()
|
||||||
|
|
||||||
|
bingbong_code = python_to_bingbong(python_code)
|
||||||
|
|
||||||
|
output_file = python_file.replace('.py', '.bb')
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(bingbong_code)
|
||||||
|
|
||||||
|
print(f"Successfully converted {python_file} to {output_file}")
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Error: File not found at '{python_file}'")
|
||||||
|
sys.exit(1)
|
||||||
Reference in New Issue
Block a user