Back to project Clone nano.git Files

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

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.

Files

  • Makefile
  • README.md
  • examples
  • nano.py