Tiny line-based language with a minimal interpreter in `__main__.py`.
## File extension
Source files use the `.dragon` extension. The interpreter also accepts a filename without an extension and will try `<name>.dragon` if it exists.
## Running
File mode:
```bash python __main__.py path/to/program.dragon ```
REPL mode:
```bash python __main__.py ```
Type `exit` or `quit` to leave the REPL.
### File resolution
When a path argument has no extension (no `.` anywhere in the name), the interpreter tries `<path>.dragon` first if it exists.
## Execution model
- The interpreter processes one line at a time. - There is no multi-line syntax, block structure, or statement separator. - Parsing is based on simple substring checks, not tokenization or a grammar.
### Matching order
Lines are checked in this order, and the first match wins:
1. `+` (addition) 2. `-` (subtraction) 3. `print` 4. `on error` 5. exact variable lookup 6. fallback error
This means lines containing `+` or `-` will never reach `print` or `on error` handling, even if those words appear in the line.
## Syntax and behavior (based on `__main__.py`)
Each line is processed independently. Parsing is minimal and based on substring checks, not a formal grammar.
Print a string literal:
```dragon print "hello" print 'world' ```
If the text after `print` matches a variable name in the interpreter environment, its value is printed instead. (Variables are not yet assignable.)
Notes:
- `print` is detected anywhere in the line, not just at the start. - The interpreter strips `print` and then trims spaces and quotes (`"`, `'`) from both ends. There is no escape handling.
### Integer math
Addition and subtraction are supported with integers:
```dragon 2+3 10-4 ```
Whitespace around operators is allowed.
Notes:
- The interpreter splits on the first `+` or `-` it sees. - Both sides are trimmed and looked up in the environment before parsing. - Non-integer values raise a `ValueError` and are reported as a generic error.
### Variables (read-only)
Variables can be read if they already exist in the interpreter environment. There is currently no syntax to assign new variables. Variables are stored in the `env` dictionary in `__main__.py`.
### "on error"
There is a special line prefix `on error` that is parsed but does not currently produce output. It strips the prefix, looks up the remaining text in the environment if present, and then returns without printing.
## Error behavior
- File mode: any exception in `run()` prints `Error in line: <line>`. - REPL mode: exceptions are caught, but the current code prints the exception class object rather than the actual error message.
## Example program
```dragon print "hello" 2 + 3 10-4 ```
## Current limitations
- No variable assignment yet (the environment is read-only). - No conditionals, loops, or functions. - No comments, string escapes, or multi-line statements. - Errors are reported as `Error in line: <line>`. - The `on error` line is parsed but has no visible effect.
## Reserved words
The following words are used in the interpreter:
- `webcollect` - `list` - `open` - `system` - `shutdown` - `warn` - `go to` - `enter` - `info` - `time` - `pause`
## Using `pause`
```dragon pause <amount> ```