multilingualprogramming 0.2.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {multilingualprogramming-0.2.0/multilingualprogramming.egg-info → multilingualprogramming-0.4.0}/PKG-INFO +68 -5
- multilingualprogramming-0.2.0/PKG-INFO → multilingualprogramming-0.4.0/README.md +58 -31
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/__init__.py +2 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/__main__.py +51 -2
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/codegen/repl.py +43 -5
- multilingualprogramming-0.4.0/multilingualprogramming/codegen/wasm_generator.py +247 -0
- multilingualprogramming-0.4.0/multilingualprogramming/codegen/wat_generator.py +762 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/parser.py +31 -2
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/parser/error_messages.json +19 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/repl/commands.json +82 -0
- multilingualprogramming-0.4.0/multilingualprogramming/runtime/backend_selector.py +335 -0
- multilingualprogramming-0.4.0/multilingualprogramming/runtime/python_fallbacks.py +476 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/version.py +1 -1
- multilingualprogramming-0.4.0/multilingualprogramming/wasm/loader.py +262 -0
- multilingualprogramming-0.2.0/README.md → multilingualprogramming-0.4.0/multilingualprogramming.egg-info/PKG-INFO +94 -2
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming.egg-info/SOURCES.txt +5 -0
- multilingualprogramming-0.4.0/multilingualprogramming.egg-info/requires.txt +14 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/pyproject.toml +31 -2
- multilingualprogramming-0.2.0/multilingualprogramming.egg-info/requires.txt +0 -7
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/LICENSE +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/codegen/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/codegen/executor.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/codegen/python_generator.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/codegen/runtime_builtins.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/core/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/core/ir.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/core/lowering.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/datetime/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/datetime/date_parser.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/datetime/mp_date.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/datetime/mp_datetime.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/datetime/mp_time.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/datetime/resource_loader.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/exceptions.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/imports.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/keyword/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/keyword/keyword_registry.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/keyword/keyword_validator.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/keyword/language_pack_validator.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/lexer/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/lexer/lexer.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/lexer/source_reader.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/lexer/token.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/lexer/token_types.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/abstract_numeral.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/complex_numeral.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/fraction_numeral.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/mp_numeral.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/numeral_converter.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/roman_numeral.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/numeral/unicode_numeral.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/__init__.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/ast_nodes.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/ast_printer.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/error_messages.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/semantic_analyzer.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/parser/surface_normalizer.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/datetime/eras.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/datetime/formats.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/datetime/months.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/datetime/weekdays.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/usm/builtins_aliases.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/usm/keywords.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/usm/operators.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/usm/schema.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/resources/usm/surface_patterns.json +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/unicode_string.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming.egg-info/dependency_links.txt +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming.egg-info/entry_points.txt +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming.egg-info/top_level.txt +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/setup.cfg +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/setup.py +0 -0
- {multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/tests/tests.py +0 -0
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multilingualprogramming
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Python application for multilingual programming
|
|
5
5
|
Author-email: John Samuel <johnsamuelwrites@example.com>
|
|
6
6
|
License: GPL-3.0-or-later
|
|
7
7
|
Project-URL: Homepage, https://github.com/johnsamuelwrites/multilingual
|
|
8
|
-
Project-URL: Documentation, https://
|
|
8
|
+
Project-URL: Documentation, https://johnsamuel.info/multilingual/
|
|
9
9
|
Project-URL: Repository, https://github.com/johnsamuelwrites/multilingual
|
|
10
10
|
Project-URL: Issues, https://github.com/johnsamuelwrites/multilingual/issues
|
|
11
11
|
Project-URL: Changelog, https://github.com/johnsamuelwrites/multilingual/blob/main/CHANGELOG.md
|
|
12
12
|
Keywords: programming-language,multilingual,compiler,transpiler,education
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.14
|
|
17
16
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
18
17
|
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
19
|
+
Classifier: Topic :: Software Development :: Interpreters
|
|
20
|
+
Classifier: Development Status :: 4 - Beta
|
|
19
21
|
Requires-Python: >=3.12
|
|
20
22
|
Description-Content-Type: text/markdown
|
|
21
23
|
License-File: LICENSE
|
|
@@ -25,6 +27,11 @@ Provides-Extra: dev
|
|
|
25
27
|
Requires-Dist: pytest; extra == "dev"
|
|
26
28
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
27
29
|
Requires-Dist: pylint; extra == "dev"
|
|
30
|
+
Provides-Extra: wasm
|
|
31
|
+
Requires-Dist: wasmtime>=1.0.0; extra == "wasm"
|
|
32
|
+
Provides-Extra: performance
|
|
33
|
+
Requires-Dist: wasmtime>=1.0.0; extra == "performance"
|
|
34
|
+
Requires-Dist: numpy>=1.20.0; extra == "performance"
|
|
28
35
|
Dynamic: license-file
|
|
29
36
|
|
|
30
37
|
# multilingual
|
|
@@ -89,11 +96,47 @@ Details:
|
|
|
89
96
|
Source files for this language use the `.ml` extension (for example: `hello.ml`).
|
|
90
97
|
Requires Python 3.12 or newer.
|
|
91
98
|
|
|
99
|
+
### Try The Playground (No Install Required)
|
|
100
|
+
|
|
101
|
+
You can try `multilingual` directly in your browser:
|
|
102
|
+
|
|
103
|
+
- Playground: https://johnsamuel.info/multilingual/playground.html
|
|
104
|
+
|
|
105
|
+
The playground lets you:
|
|
106
|
+
|
|
107
|
+
- Write code in supported human languages
|
|
108
|
+
- Run full execution in Pyodide
|
|
109
|
+
- Inspect generated Python
|
|
110
|
+
- Inspect generated WAT/WASM output
|
|
111
|
+
- Inspect generated Rust bridge code (Wasmtime workflow)
|
|
112
|
+
|
|
113
|
+
If you are evaluating the project, please test the playground with your language and open an issue with feedback:
|
|
114
|
+
|
|
115
|
+
- Issues: https://github.com/johnsamuelwrites/multilingual/issues
|
|
116
|
+
|
|
92
117
|
### 1. Install
|
|
93
118
|
|
|
119
|
+
PyPI package: https://pypi.org/project/multilingualprogramming/
|
|
120
|
+
|
|
121
|
+
Option 1 (recommended): install in a virtual environment.
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
python3 -m venv .venv
|
|
125
|
+
source .venv/bin/activate
|
|
126
|
+
python -m pip install --upgrade pip
|
|
127
|
+
python -m pip install multilingualprogramming
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Option 2: install with `pipx` (isolated CLI install).
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
pipx install multilingualprogramming
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
For local development from source, use:
|
|
137
|
+
|
|
94
138
|
```bash
|
|
95
139
|
pip install -r requirements.txt
|
|
96
|
-
# or
|
|
97
140
|
pip install .
|
|
98
141
|
```
|
|
99
142
|
|
|
@@ -119,7 +162,10 @@ imprimir("Hola mundo")
|
|
|
119
162
|
Start REPL:
|
|
120
163
|
|
|
121
164
|
```bash
|
|
122
|
-
#
|
|
165
|
+
# 0) Direct interactive mode (like `python`)
|
|
166
|
+
multilingual
|
|
167
|
+
|
|
168
|
+
# 1) Explicit REPL command (same behavior as above)
|
|
123
169
|
multilingual repl
|
|
124
170
|
|
|
125
171
|
# 2) French mode
|
|
@@ -127,9 +173,16 @@ multilingual repl --lang fr
|
|
|
127
173
|
|
|
128
174
|
# Optional: show generated Python while executing
|
|
129
175
|
multilingual repl --show-python
|
|
176
|
+
|
|
177
|
+
# Optional: show generated WAT (WebAssembly Text) code while executing
|
|
178
|
+
multilingual repl --show-wat
|
|
179
|
+
|
|
180
|
+
# Optional: show generated Rust/Wasmtime bridge code while executing
|
|
181
|
+
multilingual repl --show-rust
|
|
130
182
|
```
|
|
131
183
|
|
|
132
184
|
Inside the REPL, type code and press Enter to execute.
|
|
185
|
+
Both `multilingual` and `multilingual repl` start the same REPL.
|
|
133
186
|
|
|
134
187
|
Default mode example (English):
|
|
135
188
|
|
|
@@ -170,6 +223,8 @@ REPL commands:
|
|
|
170
223
|
- `:help` show commands
|
|
171
224
|
- `:language <code>` switch language
|
|
172
225
|
- `:python` toggle generated Python display
|
|
226
|
+
- `:wat` toggle generated WAT (WebAssembly Text) display
|
|
227
|
+
- `:rust` toggle generated Rust/Wasmtime bridge code display
|
|
173
228
|
- `:reset` clear session state
|
|
174
229
|
- `:kw [XX]` show language keywords
|
|
175
230
|
- `:ops [XX]` show operators and symbols
|
|
@@ -191,6 +246,12 @@ print("Hello world")
|
|
|
191
246
|
|
|
192
247
|
Run it:
|
|
193
248
|
|
|
249
|
+
```bash
|
|
250
|
+
multilingual hello.ml
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Equivalent explicit form:
|
|
254
|
+
|
|
194
255
|
```bash
|
|
195
256
|
multilingual run hello.ml
|
|
196
257
|
```
|
|
@@ -198,6 +259,7 @@ multilingual run hello.ml
|
|
|
198
259
|
Optional (force language instead of auto-detect):
|
|
199
260
|
|
|
200
261
|
```bash
|
|
262
|
+
multilingual hello.ml --lang fr
|
|
201
263
|
multilingual run hello.ml --lang fr
|
|
202
264
|
```
|
|
203
265
|
|
|
@@ -316,6 +378,7 @@ afficher("a + b =", a + b)
|
|
|
316
378
|
|
|
317
379
|
Use this README for setup and workflow; use `docs/` for design rationale and policy details.
|
|
318
380
|
|
|
381
|
+
- Browser playground (interactive): https://johnsamuel.info/multilingual/playground.html
|
|
319
382
|
- Usage guide: [USAGE.md](USAGE.md)
|
|
320
383
|
- Examples guide: [examples/README.md](examples/README.md)
|
|
321
384
|
- Detailed reference: [docs/reference.md](docs/reference.md)
|
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: multilingualprogramming
|
|
3
|
-
Version: 0.2.0
|
|
4
|
-
Summary: Python application for multilingual programming
|
|
5
|
-
Author-email: John Samuel <johnsamuelwrites@example.com>
|
|
6
|
-
License: GPL-3.0-or-later
|
|
7
|
-
Project-URL: Homepage, https://github.com/johnsamuelwrites/multilingual
|
|
8
|
-
Project-URL: Documentation, https://johnsamuelwrites.github.io/multilingual/
|
|
9
|
-
Project-URL: Repository, https://github.com/johnsamuelwrites/multilingual
|
|
10
|
-
Project-URL: Issues, https://github.com/johnsamuelwrites/multilingual/issues
|
|
11
|
-
Project-URL: Changelog, https://github.com/johnsamuelwrites/multilingual/blob/main/CHANGELOG.md
|
|
12
|
-
Keywords: programming-language,multilingual,compiler,transpiler,education
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
18
|
-
Classifier: Operating System :: OS Independent
|
|
19
|
-
Requires-Python: >=3.12
|
|
20
|
-
Description-Content-Type: text/markdown
|
|
21
|
-
License-File: LICENSE
|
|
22
|
-
Requires-Dist: roman>=3.3
|
|
23
|
-
Requires-Dist: python-dateutil>=2.8
|
|
24
|
-
Provides-Extra: dev
|
|
25
|
-
Requires-Dist: pytest; extra == "dev"
|
|
26
|
-
Requires-Dist: pytest-cov; extra == "dev"
|
|
27
|
-
Requires-Dist: pylint; extra == "dev"
|
|
28
|
-
Dynamic: license-file
|
|
29
|
-
|
|
30
1
|
# multilingual
|
|
31
2
|
Not yet another programming language. A multilingual one.
|
|
32
3
|
|
|
@@ -89,11 +60,47 @@ Details:
|
|
|
89
60
|
Source files for this language use the `.ml` extension (for example: `hello.ml`).
|
|
90
61
|
Requires Python 3.12 or newer.
|
|
91
62
|
|
|
63
|
+
### Try The Playground (No Install Required)
|
|
64
|
+
|
|
65
|
+
You can try `multilingual` directly in your browser:
|
|
66
|
+
|
|
67
|
+
- Playground: https://johnsamuel.info/multilingual/playground.html
|
|
68
|
+
|
|
69
|
+
The playground lets you:
|
|
70
|
+
|
|
71
|
+
- Write code in supported human languages
|
|
72
|
+
- Run full execution in Pyodide
|
|
73
|
+
- Inspect generated Python
|
|
74
|
+
- Inspect generated WAT/WASM output
|
|
75
|
+
- Inspect generated Rust bridge code (Wasmtime workflow)
|
|
76
|
+
|
|
77
|
+
If you are evaluating the project, please test the playground with your language and open an issue with feedback:
|
|
78
|
+
|
|
79
|
+
- Issues: https://github.com/johnsamuelwrites/multilingual/issues
|
|
80
|
+
|
|
92
81
|
### 1. Install
|
|
93
82
|
|
|
83
|
+
PyPI package: https://pypi.org/project/multilingualprogramming/
|
|
84
|
+
|
|
85
|
+
Option 1 (recommended): install in a virtual environment.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
python3 -m venv .venv
|
|
89
|
+
source .venv/bin/activate
|
|
90
|
+
python -m pip install --upgrade pip
|
|
91
|
+
python -m pip install multilingualprogramming
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Option 2: install with `pipx` (isolated CLI install).
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pipx install multilingualprogramming
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
For local development from source, use:
|
|
101
|
+
|
|
94
102
|
```bash
|
|
95
103
|
pip install -r requirements.txt
|
|
96
|
-
# or
|
|
97
104
|
pip install .
|
|
98
105
|
```
|
|
99
106
|
|
|
@@ -119,7 +126,10 @@ imprimir("Hola mundo")
|
|
|
119
126
|
Start REPL:
|
|
120
127
|
|
|
121
128
|
```bash
|
|
122
|
-
#
|
|
129
|
+
# 0) Direct interactive mode (like `python`)
|
|
130
|
+
multilingual
|
|
131
|
+
|
|
132
|
+
# 1) Explicit REPL command (same behavior as above)
|
|
123
133
|
multilingual repl
|
|
124
134
|
|
|
125
135
|
# 2) French mode
|
|
@@ -127,9 +137,16 @@ multilingual repl --lang fr
|
|
|
127
137
|
|
|
128
138
|
# Optional: show generated Python while executing
|
|
129
139
|
multilingual repl --show-python
|
|
140
|
+
|
|
141
|
+
# Optional: show generated WAT (WebAssembly Text) code while executing
|
|
142
|
+
multilingual repl --show-wat
|
|
143
|
+
|
|
144
|
+
# Optional: show generated Rust/Wasmtime bridge code while executing
|
|
145
|
+
multilingual repl --show-rust
|
|
130
146
|
```
|
|
131
147
|
|
|
132
148
|
Inside the REPL, type code and press Enter to execute.
|
|
149
|
+
Both `multilingual` and `multilingual repl` start the same REPL.
|
|
133
150
|
|
|
134
151
|
Default mode example (English):
|
|
135
152
|
|
|
@@ -170,6 +187,8 @@ REPL commands:
|
|
|
170
187
|
- `:help` show commands
|
|
171
188
|
- `:language <code>` switch language
|
|
172
189
|
- `:python` toggle generated Python display
|
|
190
|
+
- `:wat` toggle generated WAT (WebAssembly Text) display
|
|
191
|
+
- `:rust` toggle generated Rust/Wasmtime bridge code display
|
|
173
192
|
- `:reset` clear session state
|
|
174
193
|
- `:kw [XX]` show language keywords
|
|
175
194
|
- `:ops [XX]` show operators and symbols
|
|
@@ -191,6 +210,12 @@ print("Hello world")
|
|
|
191
210
|
|
|
192
211
|
Run it:
|
|
193
212
|
|
|
213
|
+
```bash
|
|
214
|
+
multilingual hello.ml
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Equivalent explicit form:
|
|
218
|
+
|
|
194
219
|
```bash
|
|
195
220
|
multilingual run hello.ml
|
|
196
221
|
```
|
|
@@ -198,6 +223,7 @@ multilingual run hello.ml
|
|
|
198
223
|
Optional (force language instead of auto-detect):
|
|
199
224
|
|
|
200
225
|
```bash
|
|
226
|
+
multilingual hello.ml --lang fr
|
|
201
227
|
multilingual run hello.ml --lang fr
|
|
202
228
|
```
|
|
203
229
|
|
|
@@ -316,6 +342,7 @@ afficher("a + b =", a + b)
|
|
|
316
342
|
|
|
317
343
|
Use this README for setup and workflow; use `docs/` for design rationale and policy details.
|
|
318
344
|
|
|
345
|
+
- Browser playground (interactive): https://johnsamuel.info/multilingual/playground.html
|
|
319
346
|
- Usage guide: [USAGE.md](USAGE.md)
|
|
320
347
|
- Examples guide: [examples/README.md](examples/README.md)
|
|
321
348
|
- Detailed reference: [docs/reference.md](docs/reference.md)
|
{multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/__init__.py
RENAMED
|
@@ -30,6 +30,7 @@ from multilingualprogramming.parser.semantic_analyzer import (
|
|
|
30
30
|
)
|
|
31
31
|
from multilingualprogramming.parser.error_messages import ErrorMessageRegistry
|
|
32
32
|
from multilingualprogramming.codegen.python_generator import PythonCodeGenerator
|
|
33
|
+
from multilingualprogramming.codegen.wat_generator import WATCodeGenerator
|
|
33
34
|
from multilingualprogramming.codegen.runtime_builtins import RuntimeBuiltins
|
|
34
35
|
from multilingualprogramming.codegen.executor import ProgramExecutor, ExecutionResult
|
|
35
36
|
from multilingualprogramming.codegen.repl import REPL
|
|
@@ -63,6 +64,7 @@ __all__ = [
|
|
|
63
64
|
"SemanticAnalyzer",
|
|
64
65
|
"ErrorMessageRegistry",
|
|
65
66
|
"PythonCodeGenerator",
|
|
67
|
+
"WATCodeGenerator",
|
|
66
68
|
"RuntimeBuiltins",
|
|
67
69
|
"ProgramExecutor",
|
|
68
70
|
"ExecutionResult",
|
{multilingualprogramming-0.2.0 → multilingualprogramming-0.4.0}/multilingualprogramming/__main__.py
RENAMED
|
@@ -9,6 +9,7 @@ CLI entry point for the multilingual programming language.
|
|
|
9
9
|
|
|
10
10
|
Usage:
|
|
11
11
|
python -m multilingualprogramming # Start REPL
|
|
12
|
+
python -m multilingualprogramming <file>.ml # Execute a source file
|
|
12
13
|
python -m multilingualprogramming run <file> # Execute a file
|
|
13
14
|
python -m multilingualprogramming repl [--lang XX] # Start REPL
|
|
14
15
|
python -m multilingualprogramming compile <file> # Show generated Python
|
|
@@ -58,7 +59,12 @@ def cmd_run(args):
|
|
|
58
59
|
|
|
59
60
|
def cmd_repl(args):
|
|
60
61
|
"""Start the interactive REPL."""
|
|
61
|
-
repl = REPL(
|
|
62
|
+
repl = REPL(
|
|
63
|
+
language=args.lang,
|
|
64
|
+
show_python=args.show_python,
|
|
65
|
+
show_wat=args.show_wat,
|
|
66
|
+
show_rust=args.show_rust,
|
|
67
|
+
)
|
|
62
68
|
repl.run()
|
|
63
69
|
|
|
64
70
|
|
|
@@ -118,11 +124,44 @@ def cmd_smoke(args):
|
|
|
118
124
|
sys.exit(1)
|
|
119
125
|
|
|
120
126
|
|
|
127
|
+
def _maybe_dispatch_direct_file_run(argv):
|
|
128
|
+
"""Dispatch `multilingual <file>.ml [--lang XX]` to `cmd_run`."""
|
|
129
|
+
if not argv:
|
|
130
|
+
return False
|
|
131
|
+
|
|
132
|
+
first = argv[0]
|
|
133
|
+
if first.startswith("-"):
|
|
134
|
+
return False
|
|
135
|
+
if not first.lower().endswith(".ml"):
|
|
136
|
+
return False
|
|
137
|
+
|
|
138
|
+
parser = argparse.ArgumentParser(
|
|
139
|
+
prog="multilingual",
|
|
140
|
+
description="Execute a multilingual source file",
|
|
141
|
+
)
|
|
142
|
+
parser.add_argument("file", help="Path to the source file")
|
|
143
|
+
parser.add_argument(
|
|
144
|
+
"--lang", default=None,
|
|
145
|
+
help="Source language code (e.g., en, fr, hi). Auto-detect if omitted.",
|
|
146
|
+
)
|
|
147
|
+
args = parser.parse_args(argv)
|
|
148
|
+
cmd_run(args)
|
|
149
|
+
return True
|
|
150
|
+
|
|
151
|
+
|
|
121
152
|
def main():
|
|
122
153
|
"""Run the CLI entry point and dispatch subcommands."""
|
|
154
|
+
argv = sys.argv[1:]
|
|
155
|
+
if _maybe_dispatch_direct_file_run(argv):
|
|
156
|
+
return
|
|
157
|
+
|
|
123
158
|
parser = argparse.ArgumentParser(
|
|
124
159
|
prog="multilingual",
|
|
125
|
-
description=
|
|
160
|
+
description=(
|
|
161
|
+
"Multilingual Programming Language CLI "
|
|
162
|
+
"(default command starts interactive REPL; "
|
|
163
|
+
"pass <file>.ml to run directly)"
|
|
164
|
+
),
|
|
126
165
|
)
|
|
127
166
|
parser.add_argument(
|
|
128
167
|
"--version", action="version",
|
|
@@ -149,6 +188,14 @@ def main():
|
|
|
149
188
|
"--show-python", action="store_true",
|
|
150
189
|
help="Display generated Python code before execution",
|
|
151
190
|
)
|
|
191
|
+
repl_parser.add_argument(
|
|
192
|
+
"--show-wat", action="store_true",
|
|
193
|
+
help="Display generated WAT (WebAssembly Text) code before execution",
|
|
194
|
+
)
|
|
195
|
+
repl_parser.add_argument(
|
|
196
|
+
"--show-rust", action="store_true",
|
|
197
|
+
help="Display generated Rust/Wasmtime bridge code before execution",
|
|
198
|
+
)
|
|
152
199
|
|
|
153
200
|
# compile subcommand
|
|
154
201
|
compile_parser = subparsers.add_parser(
|
|
@@ -187,6 +234,8 @@ def main():
|
|
|
187
234
|
# Default: start REPL
|
|
188
235
|
args.lang = None
|
|
189
236
|
args.show_python = False
|
|
237
|
+
args.show_wat = False
|
|
238
|
+
args.show_rust = False
|
|
190
239
|
cmd_repl(args)
|
|
191
240
|
|
|
192
241
|
|
|
@@ -46,7 +46,8 @@ class REPL:
|
|
|
46
46
|
_COMMAND_CATALOG = None
|
|
47
47
|
_OPERATOR_CATALOG = None
|
|
48
48
|
|
|
49
|
-
def __init__(self, language=None, show_python=False
|
|
49
|
+
def __init__(self, language=None, show_python=False, show_wat=False,
|
|
50
|
+
show_rust=False):
|
|
50
51
|
"""
|
|
51
52
|
Initialize the REPL.
|
|
52
53
|
|
|
@@ -54,9 +55,13 @@ class REPL:
|
|
|
54
55
|
language: Source language code (e.g., "en", "fr").
|
|
55
56
|
If None, auto-detect from input.
|
|
56
57
|
show_python: If True, display generated Python before execution.
|
|
58
|
+
show_wat: If True, display generated WAT code before execution.
|
|
59
|
+
show_rust: If True, display generated Rust/Wasmtime code before execution.
|
|
57
60
|
"""
|
|
58
61
|
self.language = language
|
|
59
62
|
self.show_python = show_python
|
|
63
|
+
self.show_wat = show_wat
|
|
64
|
+
self.show_rust = show_rust
|
|
60
65
|
self._globals = {}
|
|
61
66
|
self._init_globals()
|
|
62
67
|
|
|
@@ -258,12 +263,34 @@ class REPL:
|
|
|
258
263
|
generator = PythonCodeGenerator()
|
|
259
264
|
python_source = generator.generate(program)
|
|
260
265
|
|
|
266
|
+
prefix = ""
|
|
267
|
+
|
|
268
|
+
if self.show_wat:
|
|
269
|
+
try:
|
|
270
|
+
# pylint: disable-next=import-outside-toplevel
|
|
271
|
+
from multilingualprogramming.codegen.wat_generator import (
|
|
272
|
+
WATCodeGenerator,
|
|
273
|
+
)
|
|
274
|
+
wat_source = WATCodeGenerator().generate(program)
|
|
275
|
+
prefix += f"[WAT]\n{wat_source.strip()}\n"
|
|
276
|
+
except Exception as wat_exc:
|
|
277
|
+
prefix += f"[WAT error] {wat_exc}\n"
|
|
278
|
+
|
|
279
|
+
if self.show_rust:
|
|
280
|
+
try:
|
|
281
|
+
# pylint: disable-next=import-outside-toplevel
|
|
282
|
+
from multilingualprogramming.codegen.wasm_generator import (
|
|
283
|
+
WasmCodeGenerator,
|
|
284
|
+
)
|
|
285
|
+
rust_source = WasmCodeGenerator().generate(program)
|
|
286
|
+
prefix += f"[Rust/Wasmtime]\n{rust_source.strip()}\n"
|
|
287
|
+
except Exception as rust_exc:
|
|
288
|
+
prefix += f"[Rust/Wasmtime error] {rust_exc}\n"
|
|
289
|
+
|
|
261
290
|
if self.show_python:
|
|
262
|
-
|
|
263
|
-
python_source
|
|
264
|
-
)
|
|
291
|
+
prefix += f"[Python] {python_source.strip()}\n"
|
|
265
292
|
|
|
266
|
-
return self._exec(python_source)
|
|
293
|
+
return prefix + self._exec(python_source)
|
|
267
294
|
|
|
268
295
|
except Exception as exc:
|
|
269
296
|
return f"Error: {exc}\n"
|
|
@@ -399,6 +426,16 @@ class REPL:
|
|
|
399
426
|
state = "on" if self.show_python else "off"
|
|
400
427
|
print(f"Show Python: {state}")
|
|
401
428
|
return True
|
|
429
|
+
if cmd == "wat":
|
|
430
|
+
self.show_wat = not self.show_wat
|
|
431
|
+
state = "on" if self.show_wat else "off"
|
|
432
|
+
print(f"Show WAT: {state}")
|
|
433
|
+
return True
|
|
434
|
+
if cmd == "rust":
|
|
435
|
+
self.show_rust = not self.show_rust
|
|
436
|
+
state = "on" if self.show_rust else "off"
|
|
437
|
+
print(f"Show Rust/Wasmtime: {state}")
|
|
438
|
+
return True
|
|
402
439
|
if cmd == "reset":
|
|
403
440
|
self._globals.clear()
|
|
404
441
|
self._init_globals()
|
|
@@ -428,6 +465,7 @@ class REPL:
|
|
|
428
465
|
print(f"Multilingual Programming REPL v{__version__} "
|
|
429
466
|
f"[language={lang_label}]")
|
|
430
467
|
print(
|
|
468
|
+
"Start with 'multilingual' (default) or 'multilingual repl'.\n"
|
|
431
469
|
f"Type ':help' for commands. Use ':quit' (or Ctrl+C) to exit. "
|
|
432
470
|
f"EOF key is terminal-dependent ({eof_hint}).\n"
|
|
433
471
|
)
|