Skip to content

libxyz/mailang.js

Repository files navigation

Mai Language AST Parser

A TypeScript-based AST parser for the Mai language using Chevrotain. This parser implements the complete syntax specification for Mai, a domain-specific language used in financial/technical analysis.

Features

  • ✅ Complete Mai language syntax support
  • ✅ Operator precedence and associativity
  • ✅ Comments (line and block)
  • ✅ Variable declarations with initialization
  • ✅ Control flow (if-then-else with BEGIN/END blocks)
  • ✅ Function calls and member access
  • ✅ Assignment operators (:=, :, ^^, ..)
  • ✅ Reserved market data keywords (O, H, L, C)
  • ✅ Comprehensive error handling
  • ✅ Full TypeScript support with type definitions

Installation

npm install mailang.js

Usage

see example

## Language Features

### Operators (by precedence)

1. **Multiplicative**: `*`, `/`
2. **Additive**: `+`, `-`
3. **Relational**: `>`, `<`, `>=`, `<=`, `<>`, `=`
4. **Logical AND**: `&&`
5. **Logical OR**: `||`

### Assignment Operators

- `:=` - Regular assignment
- `:` - Display assignment
- `^^` - Power assignment
- `..` - Range operator

### Reserved Keywords

- **Market Data**: `O` (Open), `H` (High), `L` (Low), `C` (Close)
- **Control Flow**: `IF`, `THEN`, `ELSE`, `BEGIN`, `END`
- **Declarations**: `VARIABLE`
- **Functions**: `RETURN`

### Comments

```mai
// Line comment
/* Block comment
   spanning multiple lines */

AST Node Types

The parser produces a typed AST with the following main node types:

  • Program - Root node containing all statements
  • ExpressionStatement - Expressions used as statements
  • VariableDeclaration - Variable declarations
  • GlobalVariableDeclaration - Global variable declarations
  • IfStatement - If-then-else statements
  • BlockStatement - BEGIN/END blocks
  • ReturnStatement - Return statements
  • BinaryExpression - Binary operations
  • AssignmentExpression - Assignment operations
  • UnaryExpression - Unary operations
  • CallExpression - Function calls
  • MemberExpression - Property access
  • Identifier - Variable names
  • NumberLiteral - Numeric literals
  • StringLiteral - String literals

Error Handling

The parser provides detailed error messages for:

  • Lexical errors (invalid tokens)
  • Syntax errors (invalid grammar)
  • Missing semicolons
  • Unclosed blocks
  • Invalid expressions
const result = parseMai('invalid syntax');
if (result.errors.length > 0) {
  console.log('Parse errors:', result.errors);
  // Output: Parse errors: ["Parsing errors: Unexpected token: found 'invalid' but expected one of: ..."]
}

Development

# Install dependencies
npm install

# Build the project
npm run build

# Run tests
npm test

# Watch mode for development
npm run dev

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published