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.