Compare commits
8 Commits
c760a98e60
...
159197c68e
| Author | SHA1 | Date | |
|---|---|---|---|
| 159197c68e | |||
| 1d124d29d4 | |||
| 31cc276643 | |||
| 5124f6d543 | |||
| 071acedcc0 | |||
| 25b652c052 | |||
| 4ee33c5eaf | |||
| c2cda3f619 |
25
.gitignore
vendored
25
.gitignore
vendored
@@ -1,7 +1,24 @@
|
|||||||
|
# Python bytecode
|
||||||
*.pyc
|
*.pyc
|
||||||
__pycache__/
|
*.pyo
|
||||||
*.egg-info/
|
|
||||||
.pytest_cache/
|
# Cache
|
||||||
*.map
|
**/__pycache__/
|
||||||
|
**/*.egg-info/
|
||||||
|
**/.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
.htmlcov/
|
||||||
|
|
||||||
|
# Environment
|
||||||
.env
|
.env
|
||||||
.venv/
|
.venv/
|
||||||
|
.env/*
|
||||||
|
!/.env.example
|
||||||
|
|
||||||
|
# Build artifacts
|
||||||
|
*.map
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
|
||||||
|
# Generated test files
|
||||||
|
tests/*.py
|
||||||
|
|||||||
102
INSTALL.md
Normal file
102
INSTALL.md
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
# Installation Guide
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Option 1: Install to system (recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add Python to PATH if not already there
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# Install tampy
|
||||||
|
pip install tampy
|
||||||
|
|
||||||
|
# Verify installation
|
||||||
|
tampy --help
|
||||||
|
|
||||||
|
# Use
|
||||||
|
tampy run my_script.tampy
|
||||||
|
tampy build my_script.tampy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Use virtual environment
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create venv
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
|
# Install in development mode
|
||||||
|
pip install -e ".[dev]"
|
||||||
|
|
||||||
|
# Use
|
||||||
|
tampy run my_script.tampy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Windows (PowerShell)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Install
|
||||||
|
pip install tampy
|
||||||
|
|
||||||
|
# Add to PATH
|
||||||
|
$env:APPDATA = [Environment]::GetFolderPath("ApplicationData")
|
||||||
|
$env:PATH = "$env:APPDATA\Python\Scripts;" + $env:PATH
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
tampy --help
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone repository
|
||||||
|
git clone https://github.com/yourusername/tampy.git
|
||||||
|
cd tampy
|
||||||
|
|
||||||
|
# Install with Makefile
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
make test
|
||||||
|
|
||||||
|
# Build package
|
||||||
|
make build
|
||||||
|
|
||||||
|
# Clean
|
||||||
|
make clean
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "tampy: command not found"
|
||||||
|
|
||||||
|
Add venv bin to PATH:
|
||||||
|
```bash
|
||||||
|
# Linux/Mac
|
||||||
|
export PATH="$HOME/.venv/bin:$PATH"
|
||||||
|
|
||||||
|
# Windows (PowerShell)
|
||||||
|
$env:PATH = "$env:APPDATA\Python\Scripts;" + $env:PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
### Permission denied when installing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install --user tampy
|
||||||
|
# or
|
||||||
|
sudo pip install tampy # Use with caution
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cross-Platform Notes
|
||||||
|
|
||||||
|
- **Linux**: Use `~/.local/bin` or venv bin
|
||||||
|
- **macOS**: Use `~/Library/Python/3.x/bin` or venv bin
|
||||||
|
- **Windows**: Use `%APPDATA%\Python\Scripts` or venv Scripts folder
|
||||||
|
|
||||||
|
## Verify Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tampy --version
|
||||||
|
tampy --help
|
||||||
|
```
|
||||||
27
Makefile
Normal file
27
Makefile
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
.PHONY: install test build clean help
|
||||||
|
|
||||||
|
install:
|
||||||
|
pip install -e ".[dev]"
|
||||||
|
|
||||||
|
test:
|
||||||
|
pytest tests/ -v
|
||||||
|
|
||||||
|
build:
|
||||||
|
python -m build
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf dist/ build/ .venv/
|
||||||
|
find . -type d -name __pycache__ -exec rm -rf {} +
|
||||||
|
find . -type f -name "*.pyc" -delete
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Available commands:"
|
||||||
|
@echo " make install - Install in development mode"
|
||||||
|
@echo " make test - Run tests"
|
||||||
|
@echo " make build - Build package"
|
||||||
|
@echo " make clean - Clean build artifacts"
|
||||||
|
@echo " make - Run tests (default)"
|
||||||
|
|
||||||
|
.DEFAULT_GOAL := help
|
||||||
|
|
||||||
|
test: test
|
||||||
82
README.md
82
README.md
@@ -0,0 +1,82 @@
|
|||||||
|
# Tampy
|
||||||
|
|
||||||
|
A Python compiler/transpiler that converts Tamil code syntax to Python.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Build mode**: Generate Python code from Tamil syntax
|
||||||
|
- **Run mode**: Build and execute Tamil code directly
|
||||||
|
- **Configurable keywords**: Custom keyword mappings via JSON
|
||||||
|
- **Minimal dependencies**: Uses Python's built-in `ast` module
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install tampy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Build (generate Python code)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tampy build my_script.tampy
|
||||||
|
# Generates: my_script.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run (build and execute)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tampy run my_script.tampy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
**Input (Tamil code):**
|
||||||
|
```python
|
||||||
|
x = 1
|
||||||
|
y = 2
|
||||||
|
if x > y:
|
||||||
|
print("x is greater")
|
||||||
|
else:
|
||||||
|
print("y is greater")
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
```python
|
||||||
|
x = 1
|
||||||
|
y = 2
|
||||||
|
if x > y:
|
||||||
|
print('x is greater')
|
||||||
|
else:
|
||||||
|
print('y is greater')
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Edit `src/tampy/keywords.json` to customize keyword mappings:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"print": "இருப்பு",
|
||||||
|
"if": "இணை",
|
||||||
|
"for": "ஒவ்வொரு"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run tests
|
||||||
|
pytest tests/
|
||||||
|
|
||||||
|
# Install in development mode
|
||||||
|
pip install -e ".[dev]"
|
||||||
|
|
||||||
|
# Run tests with coverage
|
||||||
|
pytest --cov=src
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|||||||
@@ -1,13 +1,53 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["hatchling", "hatch-vcs"]
|
||||||
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "tampy"
|
name = "tampy"
|
||||||
version = "0.1.0"
|
dynamic = ["version"]
|
||||||
description = "Tamil code compiler"
|
description = "Tamil code compiler - converts Tamil code to Python"
|
||||||
|
readme = "README.md"
|
||||||
requires-python = ">=3.9"
|
requires-python = ">=3.9"
|
||||||
|
license = {text = "MIT"}
|
||||||
|
authors = [
|
||||||
|
{name = "Keshav Anand", email = "keshavanand.dev@gmail.com"}
|
||||||
|
]
|
||||||
|
keywords = ["tamil", "python", "compiler", "transpiler"]
|
||||||
|
classifiers = [
|
||||||
|
"Development Status :: 3 - Alpha",
|
||||||
|
"Intended Audience :: Developers",
|
||||||
|
"License :: OSI Approved :: MIT License",
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"Programming Language :: Python :: 3.9",
|
||||||
|
"Programming Language :: Python :: 3.10",
|
||||||
|
"Programming Language :: Python :: 3.11",
|
||||||
|
"Programming Language :: Python :: 3.12",
|
||||||
|
"Programming Language :: Python :: 3.13",
|
||||||
|
"Programming Language :: Python :: 3.14",
|
||||||
|
"Topic :: Software Development",
|
||||||
|
"Topic :: Software Development :: Compilers",
|
||||||
|
]
|
||||||
dependencies = []
|
dependencies = []
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
tampy = "tampy.cli:main"
|
tampy = "tampy.cli:main"
|
||||||
|
|
||||||
[build-system]
|
[project.optional-dependencies]
|
||||||
requires = ["hatchling"]
|
dev = [
|
||||||
build-backend = "hatchling.build"
|
"pytest>=8.0",
|
||||||
|
"pytest-cov>=4.0",
|
||||||
|
"ruff>=0.1.0",
|
||||||
|
"mypy>=1.0.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
packages = ["src/tampy"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.sdist]
|
||||||
|
include = ["/src"]
|
||||||
|
|
||||||
|
[tool.hatch.version]
|
||||||
|
source = "vcs"
|
||||||
|
|
||||||
|
[tool.hatch.build.hooks.vcs]
|
||||||
|
version-file = "src/tampy/_version.py"
|
||||||
|
|||||||
2
pytest.ini
Normal file
2
pytest.ini
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[pytest]
|
||||||
|
pythonpath = src
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
Metadata-Version: 2.4
|
|
||||||
Name: tampy
|
|
||||||
Version: 0.0.0
|
|
||||||
License-File: LICENSE
|
|
||||||
Dynamic: license-file
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
LICENSE
|
|
||||||
README.md
|
|
||||||
pyproject.toml
|
|
||||||
src/tampy/__init__.py
|
|
||||||
src/tampy/__main__.py
|
|
||||||
src/tampy/cli.py
|
|
||||||
src/tampy/keywords.py
|
|
||||||
src/tampy/transpiler.py
|
|
||||||
src/tampy.egg-info/PKG-INFO
|
|
||||||
src/tampy.egg-info/SOURCES.txt
|
|
||||||
src/tampy.egg-info/dependency_links.txt
|
|
||||||
src/tampy.egg-info/top_level.txt
|
|
||||||
tests/test.generated.py
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
tampy
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,8 +5,8 @@ import subprocess
|
|||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from src.tampy.transpiler import SimpleTranspiler
|
from .transpiler import SimpleTranspiler
|
||||||
from src.tampy.keywords import load_keywords
|
from .keywords import load_keywords
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -31,7 +31,7 @@ def main():
|
|||||||
python_code = transpiler.transpile(code)
|
python_code = transpiler.transpile(code)
|
||||||
|
|
||||||
if args.command == "build":
|
if args.command == "build":
|
||||||
output_file = args.file.replace(".tampy", ".py")
|
output_file = Path(args.file).with_suffix(".py")
|
||||||
with open(output_file, "w", encoding="utf-8") as f:
|
with open(output_file, "w", encoding="utf-8") as f:
|
||||||
f.write(python_code)
|
f.write(python_code)
|
||||||
print(f"Generated: {output_file}")
|
print(f"Generated: {output_file}")
|
||||||
|
|||||||
6
test.py
6
test.py
@@ -1,6 +0,0 @@
|
|||||||
x = 1
|
|
||||||
y = 2
|
|
||||||
if x > y:
|
|
||||||
print('x is greater')
|
|
||||||
else:
|
|
||||||
print('y is greater')
|
|
||||||
@@ -9,19 +9,20 @@ from pathlib import Path
|
|||||||
def test_build_command():
|
def test_build_command():
|
||||||
"""Test build command."""
|
"""Test build command."""
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[sys.executable, "-m", "tampy", "build", "test.tampy"],
|
[sys.executable, "-m", "tampy", "build", "tests/test.tampy"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
env={**dict(os.environ), "PYTHONPATH": "src"}
|
env={**dict(os.environ), "PYTHONPATH": "src"}
|
||||||
)
|
)
|
||||||
assert result.returncode == 0
|
assert result.returncode == 0
|
||||||
assert "Generated:" in result.stdout
|
assert "Generated:" in result.stdout
|
||||||
|
assert Path("tests/test.py").exists()
|
||||||
|
|
||||||
|
|
||||||
def test_run_command():
|
def test_run_command():
|
||||||
"""Test run command."""
|
"""Test run command."""
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[sys.executable, "-m", "tampy", "run", "test.tampy"],
|
[sys.executable, "-m", "tampy", "run", "tests/test.tampy"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
env={**dict(os.environ), "PYTHONPATH": "src"}
|
env={**dict(os.environ), "PYTHONPATH": "src"}
|
||||||
@@ -33,10 +34,10 @@ def test_run_command():
|
|||||||
def test_file_extension_replacement():
|
def test_file_extension_replacement():
|
||||||
"""Test that .tampy is replaced with .py."""
|
"""Test that .tampy is replaced with .py."""
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[sys.executable, "-m", "tampy", "build", "test.tampy"],
|
[sys.executable, "-m", "tampy", "build", "tests/test.tampy"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
env={**dict(os.environ), "PYTHONPATH": "src"}
|
env={**dict(os.environ), "PYTHONPATH": "src"}
|
||||||
)
|
)
|
||||||
assert result.returncode == 0
|
assert result.returncode == 0
|
||||||
assert Path("test.py").exists()
|
assert Path("tests/test.py").exists()
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
import ast
|
import ast
|
||||||
import pytest
|
import pytest
|
||||||
from src.tampy.transpiler import SimpleTranspiler
|
import sys
|
||||||
|
sys.path.insert(0, "..")
|
||||||
|
from tampy.transpiler import SimpleTranspiler
|
||||||
|
|
||||||
|
|
||||||
def test_simple_transpile():
|
def test_simple_transpile():
|
||||||
|
|||||||
Reference in New Issue
Block a user