multilingualprogramming 0.5.1__tar.gz → 0.6.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.5.1 → multilingualprogramming-0.6.0}/PKG-INFO +4 -1
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/README.md +3 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/executor.py +10 -7
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/python_generator.py +25 -2
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator.py +1649 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_core.py +100 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_expression.py +109 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_loop.py +106 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_manifest.py +259 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_match.py +191 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_oop.py +403 -0
- multilingualprogramming-0.6.0/multilingualprogramming/codegen/wat_generator_support.py +161 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/lexer/lexer.py +102 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/lexer/token.py +3 -1
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/lexer/token_types.py +1 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/ast_nodes.py +8 -1
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/parser.py +36 -39
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/semantic_analyzer.py +22 -6
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/usm/builtins_aliases.json +646 -2
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/version.py +1 -1
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming.egg-info/PKG-INFO +4 -1
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming.egg-info/SOURCES.txt +7 -0
- multilingualprogramming-0.5.1/multilingualprogramming/codegen/wat_generator.py +0 -1339
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/LICENSE +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/__main__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/build_orchestrator.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/encoding_guard.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/repl.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/runtime_builtins.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/codegen/wasm_generator.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/core/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/core/ir.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/core/lowering.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/datetime/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/datetime/date_parser.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/datetime/mp_date.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/datetime/mp_datetime.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/datetime/mp_time.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/datetime/resource_loader.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/exceptions.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/imports.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/keyword/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/keyword/keyword_registry.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/keyword/keyword_validator.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/keyword/language_pack_validator.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/lexer/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/lexer/source_reader.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/abstract_numeral.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/complex_numeral.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/fraction_numeral.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/mp_numeral.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/numeral_converter.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/roman_numeral.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/numeral/unicode_numeral.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/__init__.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/ast_printer.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/error_messages.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/parser/surface_normalizer.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/datetime/eras.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/datetime/formats.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/datetime/months.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/datetime/weekdays.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/parser/error_messages.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/repl/commands.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/usm/keywords.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/usm/operators.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/usm/schema.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/resources/usm/surface_patterns.json +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/runtime/backend_selector.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/runtime/numeric_primitives.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/runtime/python_fallbacks.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/unicode_string.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/wasm/loader.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/wasm/tuple_abi.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming/wasm/tuple_memory.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming.egg-info/dependency_links.txt +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming.egg-info/entry_points.txt +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming.egg-info/requires.txt +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/multilingualprogramming.egg-info/top_level.txt +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/pyproject.toml +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/setup.cfg +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/setup.py +0 -0
- {multilingualprogramming-0.5.1 → multilingualprogramming-0.6.0}/tests/tests.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multilingualprogramming
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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
|
|
@@ -301,6 +301,7 @@ multilingual run main_en.ml --lang en
|
|
|
301
301
|
- Date/time: `MPDate`, `MPTime`, `MPDatetime`
|
|
302
302
|
- Frontend: `Lexer`, `Parser`, AST nodes, `SemanticAnalyzer`
|
|
303
303
|
- Runtime: `PythonCodeGenerator`, `RuntimeBuiltins`, `ProgramExecutor`, `REPL`
|
|
304
|
+
- WAT/WASM backend: `WATCodeGenerator` — compiles multilingual AST to executable WebAssembly (core language + OOP with stateful class instances)
|
|
304
305
|
|
|
305
306
|
Additional syntax now supported:
|
|
306
307
|
|
|
@@ -396,6 +397,8 @@ Use this README for setup and workflow; use `docs/` for design rationale and pol
|
|
|
396
397
|
- Development and debugging guide: [docs/development.md](docs/development.md)
|
|
397
398
|
- Guide complet en francais: [docs/fr/programmation.md](docs/fr/programmation.md)
|
|
398
399
|
- Language onboarding guide: [docs/language_onboarding.md](docs/language_onboarding.md)
|
|
400
|
+
- WAT/WASM architecture overview: [docs/WASM_ARCHITECTURE_OVERVIEW.md](docs/WASM_ARCHITECTURE_OVERVIEW.md)
|
|
401
|
+
- WAT/WASM OOP object model reference: [docs/wat_oop_model.md](docs/wat_oop_model.md)
|
|
399
402
|
- Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
400
403
|
- Release process: [docs/releasing.md](docs/releasing.md)
|
|
401
404
|
- Changelog: [CHANGELOG.md](CHANGELOG.md)
|
|
@@ -265,6 +265,7 @@ multilingual run main_en.ml --lang en
|
|
|
265
265
|
- Date/time: `MPDate`, `MPTime`, `MPDatetime`
|
|
266
266
|
- Frontend: `Lexer`, `Parser`, AST nodes, `SemanticAnalyzer`
|
|
267
267
|
- Runtime: `PythonCodeGenerator`, `RuntimeBuiltins`, `ProgramExecutor`, `REPL`
|
|
268
|
+
- WAT/WASM backend: `WATCodeGenerator` — compiles multilingual AST to executable WebAssembly (core language + OOP with stateful class instances)
|
|
268
269
|
|
|
269
270
|
Additional syntax now supported:
|
|
270
271
|
|
|
@@ -360,6 +361,8 @@ Use this README for setup and workflow; use `docs/` for design rationale and pol
|
|
|
360
361
|
- Development and debugging guide: [docs/development.md](docs/development.md)
|
|
361
362
|
- Guide complet en francais: [docs/fr/programmation.md](docs/fr/programmation.md)
|
|
362
363
|
- Language onboarding guide: [docs/language_onboarding.md](docs/language_onboarding.md)
|
|
364
|
+
- WAT/WASM architecture overview: [docs/WASM_ARCHITECTURE_OVERVIEW.md](docs/WASM_ARCHITECTURE_OVERVIEW.md)
|
|
365
|
+
- WAT/WASM OOP object model reference: [docs/wat_oop_model.md](docs/wat_oop_model.md)
|
|
363
366
|
- Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
364
367
|
- Release process: [docs/releasing.md](docs/releasing.md)
|
|
365
368
|
- Changelog: [CHANGELOG.md](CHANGELOG.md)
|
|
@@ -16,7 +16,7 @@ import sys
|
|
|
16
16
|
|
|
17
17
|
from multilingualprogramming.lexer.lexer import Lexer
|
|
18
18
|
from multilingualprogramming.parser.parser import Parser
|
|
19
|
-
from multilingualprogramming.parser.semantic_analyzer import SemanticAnalyzer
|
|
19
|
+
from multilingualprogramming.parser.semantic_analyzer import SemanticAnalyzer, Scope, Symbol
|
|
20
20
|
from multilingualprogramming.codegen.python_generator import PythonCodeGenerator
|
|
21
21
|
from multilingualprogramming.codegen.runtime_builtins import RuntimeBuiltins
|
|
22
22
|
from multilingualprogramming.core.lowering import lower_to_core_ir
|
|
@@ -92,14 +92,17 @@ class ProgramExecutor:
|
|
|
92
92
|
analyzer = SemanticAnalyzer(
|
|
93
93
|
source_language=detected_language
|
|
94
94
|
)
|
|
95
|
-
# Pre-seed
|
|
96
|
-
# names like print, range, len, etc. are
|
|
97
|
-
#
|
|
95
|
+
# Pre-seed a builtins scope *below* the global scope so that
|
|
96
|
+
# names like print, range, len, etc. are found by lookup()
|
|
97
|
+
# but NOT by lookup_local(). This lets user code redeclare a
|
|
98
|
+
# builtin with `let x = ...` (VariableDeclaration) without
|
|
99
|
+
# triggering a spurious DUPLICATE_DEFINITION error.
|
|
98
100
|
builtins_ns = RuntimeBuiltins(detected_language).namespace()
|
|
101
|
+
builtins_scope = Scope("builtins", "global")
|
|
99
102
|
for name in builtins_ns:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
builtins_scope.define(Symbol(name, "variable"))
|
|
104
|
+
# Attach the builtins scope as the parent of the global scope.
|
|
105
|
+
analyzer.symbol_table.global_scope.parent = builtins_scope
|
|
103
106
|
semantic_errors = analyzer.analyze(core_program.ast)
|
|
104
107
|
if semantic_errors:
|
|
105
108
|
return ExecutionResult(
|
|
@@ -6,9 +6,25 @@
|
|
|
6
6
|
|
|
7
7
|
"""Python code generator: transpiles the multilingual AST to valid Python source."""
|
|
8
8
|
|
|
9
|
+
from multilingualprogramming.core.ir import CoreIRProgram
|
|
9
10
|
from multilingualprogramming.exceptions import CodeGenerationError
|
|
10
11
|
from multilingualprogramming.numeral.mp_numeral import MPNumeral
|
|
11
|
-
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _emit_raw_literal(prefix: str, value: str) -> str:
|
|
15
|
+
"""Emit a raw string or raw bytes literal with the given prefix (r or rb).
|
|
16
|
+
|
|
17
|
+
Chooses the quote style (single, double, triple) to avoid unescapable
|
|
18
|
+
quote conflicts, since backslash escapes are not allowed in raw literals.
|
|
19
|
+
"""
|
|
20
|
+
if '"' not in value:
|
|
21
|
+
return f'{prefix}"{value}"'
|
|
22
|
+
if "'" not in value:
|
|
23
|
+
return f"{prefix}'{value}'"
|
|
24
|
+
# Both quote chars present — use triple double-quotes if possible
|
|
25
|
+
if '"""' not in value:
|
|
26
|
+
return f'{prefix}"""{value}"""'
|
|
27
|
+
return f"{prefix}'''{value}'''"
|
|
12
28
|
|
|
13
29
|
|
|
14
30
|
class PythonCodeGenerator:
|
|
@@ -364,8 +380,15 @@ class _ExpressionGenerator:
|
|
|
364
380
|
return self._convert_numeral(node.value)
|
|
365
381
|
|
|
366
382
|
def visit_StringLiteral(self, node):
|
|
383
|
+
if getattr(node, "raw", False):
|
|
384
|
+
return _emit_raw_literal("r", node.value)
|
|
367
385
|
return repr(node.value)
|
|
368
386
|
|
|
387
|
+
def visit_BytesLiteral(self, node):
|
|
388
|
+
if getattr(node, "raw", False):
|
|
389
|
+
return _emit_raw_literal("rb", node.value)
|
|
390
|
+
return f"b{repr(node.value)}"
|
|
391
|
+
|
|
369
392
|
def visit_DateLiteral(self, node):
|
|
370
393
|
# Emit as a string for runtime parsing
|
|
371
394
|
return repr(node.value)
|
|
@@ -511,7 +534,7 @@ class _ExpressionGenerator:
|
|
|
511
534
|
# Single-element tuples need trailing comma: (x,)
|
|
512
535
|
if len(node.elements) == 1:
|
|
513
536
|
elems += ","
|
|
514
|
-
return elems
|
|
537
|
+
return f"({elems})"
|
|
515
538
|
|
|
516
539
|
def visit_ListComprehension(self, node):
|
|
517
540
|
elem = self._expr(node.element)
|