Lefngapä lì'fya
Aysìnvi is an esolang based on the Na'vi constructed language from Avatar. Some of the main goals of this project are:
- having the least non-alphabetic symbols possible to represent the oral culture of Na'vi (including math operators),
- making conjugation of verbs (here functions) have a purpose,
- building an actually usable standard library that interfaces with lower level APIs to make this esolang technically productive.
ay+
-> plural prefix, causes lenition
tìnvi
-> task, errand, step (in an instruction)
- Grammar
- Parsed AST
- Bound AST (missing recursion)
- Typed AST
- Generic AST pattern replace
- Interpreter
- Compiler
- REPL
- LSP
- Module inclusion
- Statements
- If construct
- Truthy condition
- Comparison condition
- Loop construct
- Function definition
- Infix position marking
- Arity =0 functions
- Arity >1 functions
- Variable definition
- Singular variable definition
- Dual, trial and plural variable definition
- If construct
- Expressions
- Literal parsing
- Numbers (temporary numeric form)
- Strings
- Data structures
- Arrays
- Identifiers
- Comparisons
- Function calling
- Arity =0
si
form - Arity >1
fa
form
- Arity =0
- Literal parsing
- Module inclusion
- Statements
- If construct
- Loop construct
- Function declaration
- Variable declaration
- Expressions
- Literals
- Numbers (temporary numeric form)
- Octal parsing
- Multiplier (
melo
/pxelo
) parsing
- Strings
- Numbers (temporary numeric form)
- Data structures
- Arrays
- Identifiers
- Comparisons
- Function calls
- Literals
- Variables
- Definition
- Use
- Functions
- Definition
- Call
- Recursion
- Definitions
- Variables
- Functions
- Expressions
- Literals
- Variable use
- Function call
- Comparisons
This step aims to provide a nice API to enable advanced users to consisely define their own mini pattern finding language.
This must be generic and user-defined as modules use different types of structs and enums that rarely have the same names or components.
The general structure should be the same.
For example:
Fd(_,_,[Vd(_, _)])/d
could be a representation for
"Match any Function definition with a single Variable definition in its body and delete its subtree from the AST".[Fd(name,argnames,body),Fc(name,args)]/s/[Vd(argnames,args),body]
could be a representation for
"Match any Function definition followed only by a Function call to it and substitute this match with a Variable definition of the call arg(s)uments followed by the function's body".
I have been informed that I am forced to add that since this is made with Rust, it will obviously be 🚀 blazingly fast 🚀