Add docs/SPEC.md from Claro v1.17.26 zip
This commit is contained in:
+253
@@ -0,0 +1,253 @@
|
|||||||
|
# Claro Language Specification (Draft)
|
||||||
|
|
||||||
|
Version: **0.19-draft** (Beta19-Spec)
|
||||||
|
Status: **Draft** (stability work in progress)
|
||||||
|
|
||||||
|
This document defines the intended behavior of the Claro language. It’s written to reduce breaking
|
||||||
|
changes and make the path to 1.0 clear.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Design goals
|
||||||
|
|
||||||
|
1. Easy to learn: readable keywords, minimal punctuation.
|
||||||
|
2. Accessible: consistent rules, simple mental model, clear errors.
|
||||||
|
3. General-purpose scripting: files, JSON/CSV, small tools.
|
||||||
|
4. Safe by default: TRY/CATCH, predictable runtime behavior.
|
||||||
|
|
||||||
|
Non-goals for 1.0:
|
||||||
|
- Concurrency / threads
|
||||||
|
- Advanced static typing
|
||||||
|
- Metaprogramming / macros
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Source files
|
||||||
|
|
||||||
|
- UTF-8 text files.
|
||||||
|
- LF or CRLF line endings.
|
||||||
|
- Trailing whitespace is ignored.
|
||||||
|
- Empty lines are ignored.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Comments
|
||||||
|
|
||||||
|
### 3.1 Single-line
|
||||||
|
`#` starts a comment to end-of-line.
|
||||||
|
|
||||||
|
### 3.2 Multi-line block
|
||||||
|
A block comment starts with `COMMENT` and ends with `ENDCOMMENT`.
|
||||||
|
Everything between is ignored.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Runtime values (types)
|
||||||
|
|
||||||
|
Claro is dynamically typed. A value is one of:
|
||||||
|
|
||||||
|
- NONE
|
||||||
|
- NUMBER (floating point; also used for integers)
|
||||||
|
- TEXT
|
||||||
|
- BOOL (`YES` / `NO`)
|
||||||
|
- LIST (ordered; **1-based indexing**)
|
||||||
|
- MAP (dictionary; keys are TEXT)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Variables
|
||||||
|
|
||||||
|
### 5.1 Assignment
|
||||||
|
```
|
||||||
|
SET name TO "Alex"
|
||||||
|
SET n TO 10
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 Built-ins
|
||||||
|
These names are used by the runtime:
|
||||||
|
|
||||||
|
- RESULT — value returned by the most recent CALL
|
||||||
|
- LASTERROR — most recent error message
|
||||||
|
- LASTERRORFILE — file name for most recent error
|
||||||
|
- LASTERRORLINE — line number for most recent error
|
||||||
|
|
||||||
|
User code can read these. Writing them is allowed but discouraged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Expressions
|
||||||
|
|
||||||
|
Expressions can appear in SET/IF/RETURN/etc.
|
||||||
|
|
||||||
|
Operators (high → low precedence):
|
||||||
|
|
||||||
|
1. `( ... )`
|
||||||
|
2. `NOT x`
|
||||||
|
3. `* /`
|
||||||
|
4. `+ -`
|
||||||
|
5. `= != < <= > >=`
|
||||||
|
6. `AND OR`
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
- `+` concatenates text if either operand is TEXT.
|
||||||
|
- Comparisons return BOOL.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Commands (statements)
|
||||||
|
|
||||||
|
Keywords are case-insensitive. Each statement is one line beginning with a keyword.
|
||||||
|
|
||||||
|
### Output
|
||||||
|
```
|
||||||
|
SAY expr
|
||||||
|
```
|
||||||
|
|
||||||
|
### Conditionals
|
||||||
|
```
|
||||||
|
IF cond
|
||||||
|
...
|
||||||
|
ELSEIF cond
|
||||||
|
...
|
||||||
|
ELSE
|
||||||
|
...
|
||||||
|
ENDIF
|
||||||
|
```
|
||||||
|
|
||||||
|
### Loops
|
||||||
|
|
||||||
|
Numeric:
|
||||||
|
```
|
||||||
|
FOR i FROM a TO b
|
||||||
|
...
|
||||||
|
DONE
|
||||||
|
```
|
||||||
|
|
||||||
|
Iteration:
|
||||||
|
```
|
||||||
|
FOR EACH item IN listOrMap
|
||||||
|
...
|
||||||
|
DONE
|
||||||
|
```
|
||||||
|
|
||||||
|
Repeat:
|
||||||
|
```
|
||||||
|
REPEAT
|
||||||
|
...
|
||||||
|
UNTIL cond
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Functions
|
||||||
|
|
||||||
|
Define:
|
||||||
|
```
|
||||||
|
TEACH name TAKES a, b
|
||||||
|
...
|
||||||
|
RETURN expr
|
||||||
|
LEARNED
|
||||||
|
```
|
||||||
|
|
||||||
|
Call:
|
||||||
|
```
|
||||||
|
CALL name WITH x, y
|
||||||
|
```
|
||||||
|
|
||||||
|
After CALL, RESULT contains the returned value (or NONE if no RETURN executed).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Errors
|
||||||
|
|
||||||
|
Raise:
|
||||||
|
```
|
||||||
|
RAISE "message"
|
||||||
|
```
|
||||||
|
|
||||||
|
Handle:
|
||||||
|
```
|
||||||
|
TRY
|
||||||
|
...
|
||||||
|
CATCH
|
||||||
|
SAY LASTERROR
|
||||||
|
ENDTRY
|
||||||
|
```
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
- Errors inside TRY jump to CATCH.
|
||||||
|
- Errors outside TRY terminate the program with non-zero exit code.
|
||||||
|
- LASTERROR*, including file/line, update on error.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Data structures
|
||||||
|
|
||||||
|
### LIST
|
||||||
|
1-based indexing:
|
||||||
|
```
|
||||||
|
SET xs TO LIST
|
||||||
|
ADD 1 TO xs
|
||||||
|
GET xs AT 1 AS first
|
||||||
|
```
|
||||||
|
|
||||||
|
### MAP
|
||||||
|
TEXT keys:
|
||||||
|
```
|
||||||
|
SET m TO MAP
|
||||||
|
PUT m KEY "k" VALUE 1
|
||||||
|
GET m KEY "k" AS v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. JSON
|
||||||
|
|
||||||
|
Parse:
|
||||||
|
```
|
||||||
|
PARSE JSON text AS value
|
||||||
|
```
|
||||||
|
|
||||||
|
Make:
|
||||||
|
```
|
||||||
|
MAKE JSON value AS text
|
||||||
|
MAKE JSON PRETTY value AS text
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse errors should report a position (character offset) and context snippet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Imports
|
||||||
|
|
||||||
|
```
|
||||||
|
IMPORT "path/to/module.claro" AS mod
|
||||||
|
EXPORT ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
Import resolution order:
|
||||||
|
1. Relative to the importing file’s folder
|
||||||
|
2. Each folder in CLARO_PATH
|
||||||
|
3. Current working directory
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. CLI
|
||||||
|
|
||||||
|
```
|
||||||
|
claro run file.claro
|
||||||
|
claro repl
|
||||||
|
claro fmt file.claro [--inplace]
|
||||||
|
claro check file.claro
|
||||||
|
claro test
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. Beta “may change” list
|
||||||
|
|
||||||
|
Until 1.0, these are still being stabilized:
|
||||||
|
- exact numeric precision rules
|
||||||
|
- MAP iteration ordering (1.0 will define it)
|
||||||
|
- exact wording/format of error messages
|
||||||
|
- REPL multi-line behaviors
|
||||||
Reference in New Issue
Block a user