# nano
A minimal interpreted programming language implemented in Python.
**Author:** retoor <retoor@molodetz.nl>
## Overview
nano is a dynamically typed scripting language with C-like syntax. The interpreter is implemented in approximately 500 lines of Python code. The language supports object-oriented programming with classes, constructors, destructors, and methods.
## Usage
```bash
python nano.py <filename.nano>
```
## Language Features
### Data Types
| Type | Example |
|---------|------------------------------|
| int | `42` |
| float | `3.14` |
| string | `"hello"` or `'hello'` |
| array | `{1, 2, 3}` |
| null | `null` |
| object | `new ClassName()` |
### Operators
**Arithmetic:** `+`, `-`, `*`, `/`, `%`
**Comparison:** `==`, `!=`, `<`, `>`, `<=`, `>=`
**Logical:** `&&`, `||`
**Assignment:** `=`, `+=`, `-=`, `*=`, `/=`
**Increment/Decrement:** `++`, `--`
**Pointer:** `&` (address-of), `*` (dereference)
### Control Flow
```
if (condition) {
// statements
} else {
// statements
}
while (condition) {
// statements
}
for (init; condition; update) {
// statements
}
```
### Classes
```
class ClassName {
property = initialValue;
ClassName(this, param1, param2) {
this.property = param1;
}
~ClassName(this) {
// destructor
}
method(this, arg) {
return this.property + arg;
}
}
obj = new ClassName(value1, value2);
obj.method(arg);
```
### Functions
Methods support default parameters, variable arguments, and keyword arguments:
```
method(this, required, optional = "default", *args, **kwargs) {
// body
}
```
### Built-in Functions
| Function | Description |
|-------------|--------------------------------------|
| `print()` | Output values to console |
| `len()` | Return length of string or array |
| `str()` | Convert value to string |
| `int()` | Convert value to integer |
| `bool()` | Convert value to boolean (0 or 1) |
| `typeof()` | Return type name as string |
### String Methods
| Method | Description |
|--------------|--------------------------------------|
| `.substr(start, length)` | Extract substring |
| `.split(delimiter)` | Split into array |
| `.count(substr)` | Count occurrences |
| `.indexOf(substr)` | Find first index |
| `.toUpper()` | Convert to uppercase |
| `.toLower()` | Convert to lowercase |
| `.trim()` | Remove whitespace |
| `.replace(old, new)` | Replace substring |
| `.length` | String length property |
### Array Methods
| Method | Description |
|------------------------|--------------------------------|
| `.push(value)` | Append element |
| `.pop()` | Remove and return last element |
| `.join(separator)` | Join elements into string |
| `.indexOf(value)` | Find index of element |
| `.slice(start, end)` | Extract subarray |
| `.length` | Array length property |
### Comments
```
// single line comment
/* multi-line
comment */
```
## Examples
The `examples/` directory contains demonstrations of language features:
| File | Description |
|-------------------|------------------------------------------|
| `arrays.nano` | Array operations and iteration |
| `classes.nano` | Class definitions and object creation |
| `control_flow.nano` | Conditionals and loops |
| `fibonacci.nano` | Fibonacci sequence calculation |
| `functions.nano` | Method definitions and recursion |
| `json.nano` | JSON encoder/decoder implementation |
| `objects.nano` | Object composition and state management |
| `operators.nano` | Arithmetic and logical operators |
| `pointers.nano` | Pointer operations and references |
| `strings.nano` | String manipulation methods |
| `sudoku.nano` | Sudoku solver using backtracking |
| `types.nano` | Type system and coercion |
## Implementation
The interpreter consists of:
- **Tokenizer:** Converts source code into tokens using regular expressions
- **Parser:** Constructs syntax structures from token streams
- **Runtime:** Executes parsed statements with scope management
Classes are stored as `NanoClass` objects containing properties, methods, constructor, and destructor definitions. Instances are `NanoObject` objects with their own property copies.
## License
MIT - Like always.