about summary refs log tree commit diff stats
path: root/js/scripting-lang/baba-yaga-c/COMP.md
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/baba-yaga-c/COMP.md')
-rw-r--r--js/scripting-lang/baba-yaga-c/COMP.md882
1 files changed, 0 insertions, 882 deletions
diff --git a/js/scripting-lang/baba-yaga-c/COMP.md b/js/scripting-lang/baba-yaga-c/COMP.md
deleted file mode 100644
index 33f25ae..0000000
--- a/js/scripting-lang/baba-yaga-c/COMP.md
+++ /dev/null
@@ -1,882 +0,0 @@
-# Baba Yaga JavaScript Implementation Architecture
-
-## Overview
-
-Baba Yaga is a functional scripting language implemented in JavaScript with a combinator-based architecture. The language emphasizes functional programming patterns, immutable data structures, and a consistent execution model where all operations are translated to function calls.
-
-## Core Architecture Principles
-
-### 1. Combinator Foundation
-All language operations are translated to function calls to standard library combinators. This eliminates parsing ambiguity while preserving intuitive syntax.
-
-**Key Design Decision**: Operators like `+`, `-`, `*`, `/` are translated to `add(x, y)`, `subtract(x, y)`, `multiply(x, y)`, `divide(x, y)` respectively.
-
-### 2. Functional Programming Paradigm
-- First-class functions with support for partial application and currying
-- Immutable data structures (tables are never modified in-place)
-- Pattern matching through `when` expressions
-- Function composition via `via` operator
-
-### 3. Cross-Platform Compatibility
-The implementation supports Node.js, Bun, and browser environments through environment detection and platform-specific adapters.
-
-## Language Components
-
-### 1. Lexer (`lexer.js`)
-
-**Purpose**: Converts source code into tokens for parsing.
-
-**Key Features**:
-- Character-by-character scanning with lookahead
-- Comprehensive token type enumeration (NUMBER, PLUS, MINUS, IDENTIFIER, etc.)
-- Support for comments (single-line `//` and multi-line `/* */`)
-- IO operations (`..in`, `..out`, `..assert`, `..listen`, `..emit`)
-- Function references (`@functionName`) and arguments (`@(expression)`)
-- String literals with escape sequences (`\n`, `\t`, `\r`, `\\`, `\"`)
-- Detailed position tracking (line/column) for error reporting
-- Minus operator disambiguation based on spacing context
-
-**Token Types**:
-```javascript
-export const TokenType = {
-    NUMBER: 'NUMBER',
-    PLUS: 'PLUS',
-    MINUS: 'MINUS',
-    UNARY_MINUS: 'UNARY_MINUS',
-    BINARY_MINUS: 'BINARY_MINUS',
-    MULTIPLY: 'MULTIPLY',
-    DIVIDE: 'DIVIDE',
-    IDENTIFIER: 'IDENTIFIER',
-    ASSIGNMENT: 'ASSIGNMENT',  // ':'
-    ARROW: 'ARROW',           // '->'
-    CASE: 'CASE',
-    OF: 'OF',
-    WHEN: 'WHEN',
-    IS: 'IS',
-    THEN: 'THEN',
-    WILDCARD: 'WILDCARD',     // '_'
-    FUNCTION: 'FUNCTION',
-    LEFT_PAREN: 'LEFT_PAREN',     // '('
-    RIGHT_PAREN: 'RIGHT_PAREN',   // ')'
-    LEFT_BRACE: 'LEFT_BRACE',     // '{'
-    RIGHT_BRACE: 'RIGHT_BRACE',   // '}'
-    LEFT_BRACKET: 'LEFT_BRACKET', // '['
-    RIGHT_BRACKET: 'RIGHT_BRACKET', // ']'
-    SEMICOLON: 'SEMICOLON',       // ';'
-    COMMA: 'COMMA',               // ','
-    DOT: 'DOT',                   // '.'
-    STRING: 'STRING',
-    TRUE: 'TRUE',
-    FALSE: 'FALSE',
-    AND: 'AND',
-    OR: 'OR',
-    XOR: 'XOR',
-    NOT: 'NOT',
-    EQUALS: 'EQUALS',             // '=='
-    LESS_THAN: 'LESS_THAN',       // '<'
-    GREATER_THAN: 'GREATER_THAN', // '>'
-    LESS_EQUAL: 'LESS_EQUAL',     // '<='
-    GREATER_EQUAL: 'GREATER_EQUAL', // '>='
-    NOT_EQUAL: 'NOT_EQUAL',       // '!='
-    MODULO: 'MODULO',             // '%'
-    POWER: 'POWER',               // '^'
-    IO_IN: 'IO_IN',               // '..in'
-    IO_OUT: 'IO_OUT',             // '..out'
-    IO_ASSERT: 'IO_ASSERT',       // '..assert'
-    IO_LISTEN: 'IO_LISTEN',       // '..listen'
-    IO_EMIT: 'IO_EMIT',           // '..emit'
-    FUNCTION_REF: 'FUNCTION_REF', // '@functionName'
-    FUNCTION_ARG: 'FUNCTION_ARG', // '@(expression)'
-    COMPOSE: 'COMPOSE'            // 'via'
-};
-```
-
-**Critical Implementation Details**:
-- Minus operator disambiguation: Uses spacing context to distinguish unary vs binary minus
-- Function composition: `via` keyword for function composition
-- IO operations: `..` prefix for all IO operations
-- Function references: `@` prefix for function references
-
-**Token Structure**:
-```javascript
-/**
- * @typedef {Object} Token
- * @property {string} type - The token type from TokenType enum
- * @property {*} [value] - The token's value (for literals and identifiers)
- * @property {string} [name] - Function name (for FUNCTION_REF tokens)
- * @property {number} line - Line number where token appears (1-indexed)
- * @property {number} column - Column number where token appears (1-indexed)
- */
-```
-
-**Minus Operator Disambiguation Logic**:
-```javascript
-// Check spacing to determine token type
-const isUnary = !hasLeadingWhitespace();
-const isBinary = hasLeadingAndTrailingSpaces();
-const isFollowedByNumber = current + 1 < input.length && /[0-9]/.test(input[current + 1]);
-
-if (isUnary && isFollowedByNumber) {
-    // Unary minus at start of expression: -5
-    tokens.push({ type: TokenType.UNARY_MINUS, line, column });
-} else if (isBinary) {
-    // Binary minus with spaces: 5 - 3
-    tokens.push({ type: TokenType.BINARY_MINUS, line, column });
-} else if (isFollowedByNumber) {
-    // Minus followed by number but not at start: 5-3 (legacy)
-    tokens.push({ type: TokenType.MINUS, line, column });
-} else {
-    // Fallback to legacy MINUS token for edge cases
-    tokens.push({ type: TokenType.MINUS, line, column });
-}
-```
-
-### 2. Parser (`parser.js`)
-
-**Purpose**: Converts tokens into an Abstract Syntax Tree (AST) using recursive descent parsing.
-
-**Architecture**: Combinator-based parsing where all operators become `FunctionCall` nodes.
-
-**Key Parsing Functions**:
-
-#### Operator Precedence (highest to lowest):
-1. **Primary**: Literals, identifiers, parenthesized expressions, table access
-2. **Factor**: Power expressions (`^`), unary operators (`not`, `-`)
-3. **Term**: Multiplication, division, modulo (`*`, `/`, `%`)
-4. **Expression**: Addition, subtraction, comparisons (`+`, `-`, `=`, `<`, `>`, etc.)
-5. **Application**: Function application (juxtaposition) - left-associative
-6. **Composition**: Function composition (`via`) - right-associative
-7. **Logical**: Logical operators (`and`, `or`, `xor`)
-
-#### Function Application
-- **Juxtaposition**: `f x` becomes `apply(f, x)` - left-associative
-- **Composition**: `f via g` becomes `compose(f, g)` - right-associative
-- **Parenthesized**: `f(x)` becomes `apply(f, x)`
-
-#### When Expressions (Pattern Matching)
-```javascript
-// Syntax: when value is pattern then result pattern then result;
-{
-    type: 'WhenExpression',
-    value: [value1, value2, ...],  // Can be single value or array
-    cases: [
-        {
-            pattern: [pattern1, pattern2, ...],  // Can be single pattern or array
-            result: [result1, result2, ...]      // Can be single result or array
-        }
-    ]
-}
-```
-
-**Example When Expression Parsing**:
-```javascript
-// Input: when x is 42 then "correct" _ then "wrong";
-{
-    type: 'WhenExpression',
-    value: { type: 'Identifier', value: 'x' },
-    cases: [
-        {
-            pattern: [{ type: 'NumberLiteral', value: 42 }],
-            result: [{ type: 'StringLiteral', value: 'correct' }]
-        },
-        {
-            pattern: [{ type: 'WildcardPattern' }],
-            result: [{ type: 'StringLiteral', value: 'wrong' }]
-        }
-    ]
-}
-```
-
-**Multi-Value Pattern Matching**:
-```javascript
-// Input: when x y is 0 0 then "both zero" _ _ then "not both";
-{
-    type: 'WhenExpression',
-    value: [
-        { type: 'Identifier', value: 'x' },
-        { type: 'Identifier', value: 'y' }
-    ],
-    cases: [
-        {
-            pattern: [
-                { type: 'NumberLiteral', value: 0 },
-                { type: 'NumberLiteral', value: 0 }
-            ],
-            result: [{ type: 'StringLiteral', value: 'both zero' }]
-        },
-        {
-            pattern: [
-                { type: 'WildcardPattern' },
-                { type: 'WildcardPattern' }
-            ],
-            result: [{ type: 'StringLiteral', value: 'not both' }]
-        }
-    ]
-}
-```
-
-**Pattern Types**:
-- Literals (numbers, strings, booleans)
-- Wildcards (`_`)
-- Function references (`@functionName`)
-- Comparison expressions (`x < 0`)
-- Table patterns
-- Parenthesized expressions
-
-#### Table Literals
-Supports both key-value pairs and array-like entries:
-```javascript
-// Key-value: {name: "Alice", age: 30}
-// Array-like: {1, 2, 3}  // Auto-assigned keys 1, 2, 3
-// Mixed: {1, name: "Alice", 2}
-```
-
-**Table Literal AST Structure**:
-```javascript
-{
-    type: 'TableLiteral',
-    entries: [
-        {
-            key: { type: 'Identifier', value: 'name' },
-            value: { type: 'StringLiteral', value: 'Alice' }
-        },
-        {
-            key: null,  // Array-like entry
-            value: { type: 'NumberLiteral', value: 1 }
-        },
-        {
-            key: { type: 'NumberLiteral', value: 2 },
-            value: { type: 'StringLiteral', value: 'value' }
-        }
-    ]
-}
-```
-
-**Table Access AST Structure**:
-```javascript
-// table.property
-{
-    type: 'TableAccess',
-    table: { type: 'Identifier', value: 'table' },
-    key: { type: 'Identifier', value: 'property' }
-}
-
-// table[key]
-{
-    type: 'TableAccess',
-    table: { type: 'Identifier', value: 'table' },
-    key: { type: 'Identifier', value: 'key' }
-}
-
-// Chained access: table.property[key].nested
-{
-    type: 'TableAccess',
-    table: {
-        type: 'TableAccess',
-        table: {
-            type: 'TableAccess',
-            table: { type: 'Identifier', value: 'table' },
-            key: { type: 'Identifier', value: 'property' }
-        },
-        key: { type: 'Identifier', value: 'key' }
-    },
-    key: { type: 'Identifier', value: 'nested' }
-}
-```
-
-### 3. Interpreter (`lang.js`)
-
-**Purpose**: Evaluates AST nodes using the combinator foundation.
-
-**Core Architecture**:
-
-#### Standard Library Initialization
-The interpreter initializes a comprehensive standard library with combinator functions:
-
-**Higher-Order Functions**:
-- `map(f, x)`: Apply function to value or collection
-- `compose(f, g)`: Function composition (right-associative)
-- `apply(f, x)`: Function application
-- `pipe(f, g)`: Left-to-right function composition
-- `filter(p, x)`: Filter based on predicate
-- `reduce(f, init, x)`: Reduce with binary function
-- `curry(f, x, y)`: Currying support
-
-**Standard Library Implementation Example**:
-```javascript
-function initializeStandardLibrary(scope) {
-    // Map: Apply a function to a value or collection
-    scope.map = function(f, x) {
-        if (typeof f !== 'function') {
-            throw new Error('map: first argument must be a function');
-        }
-        
-        if (x === undefined) {
-            // Partial application: return a function that waits for the second argument
-            return function(x) {
-                return scope.map(f, x);
-            };
-        }
-        
-        // Handle tables (APL-style element-wise operations)
-        if (typeof x === 'object' && x !== null && !Array.isArray(x)) {
-            const result = {};
-            for (const [key, value] of Object.entries(x)) {
-                result[key] = f(value);
-            }
-            return result;
-        }
-        
-        // Default: apply to single value
-        return f(x);
-    };
-    
-    // Compose: Combine two functions into a new function
-    scope.compose = function(f, g) {
-        if (typeof f !== 'function') {
-            throw new Error(`compose: first argument must be a function, got ${typeof f}`);
-        }
-        
-        if (g === undefined) {
-            // Partial application: return a function that waits for the second argument
-            return function(g) {
-                if (typeof g !== 'function') {
-                    throw new Error(`compose: second argument must be a function, got ${typeof g}`);
-                }
-                return function(x) {
-                    return f(g(x));
-                };
-            };
-        }
-        
-        if (typeof g !== 'function') {
-            throw new Error(`compose: second argument must be a function, got ${typeof g}`);
-        }
-        
-        return function(x) {
-            return f(g(x));
-        };
-    };
-    
-    // Apply: Apply a function to an argument
-    scope.apply = function(f, x) { 
-        if (typeof f !== 'function') {
-            throw new Error('apply: first argument must be a function');
-        }
-        
-        if (x === undefined) {
-            // Partial application: return a function that waits for the second argument
-            return function(x) {
-                return f(x);
-            };
-        }
-        
-        // Full application: apply the function to the argument
-        return f(x);
-    };
-}
-```
-
-**Arithmetic Combinators**:
-- `add(x, y)`, `subtract(x, y)`, `multiply(x, y)`, `divide(x, y)`
-- `modulo(x, y)`, `power(x, y)`, `negate(x)`
-
-**Arithmetic Combinator Implementation**:
-```javascript
-// Add: Add two numbers
-scope.add = function(x, y) {
-    if (y === undefined) {
-        // Partial application: return a function that waits for the second argument
-        return function(y) {
-            return x + y;
-        };
-    }
-    return x + y;
-};
-
-// Subtract: Subtract second number from first
-scope.subtract = function(x, y) {
-    if (y === undefined) {
-        // Partial application: return a function that waits for the second argument
-        return function(y) {
-            return x - y;
-        };
-    }
-    return x - y;
-};
-
-// Multiply: Multiply two numbers
-scope.multiply = function(x, y) {
-    if (y === undefined) {
-        // Partial application: return a function that waits for the second argument
-        return function(y) {
-            return x * y;
-        };
-    }
-    return x * y;
-};
-
-// Divide: Divide first number by second
-scope.divide = function(x, y) {
-    if (y === undefined) {
-        // Partial application: return a function that waits for the second argument
-        return function(y) {
-            if (y === 0) {
-                throw new Error('Division by zero');
-            }
-            return x / y;
-        };
-    }
-    if (y === 0) {
-        throw new Error('Division by zero');
-    }
-    return x / y;
-};
-
-// Negate: Negate a number
-scope.negate = function(x) {
-    return -x;
-};
-```
-
-**Comparison Combinators**:
-- `equals(x, y)`, `notEquals(x, y)`
-- `lessThan(x, y)`, `greaterThan(x, y)`
-- `lessEqual(x, y)`, `greaterEqual(x, y)`
-
-**Logical Combinators**:
-- `logicalAnd(x, y)`, `logicalOr(x, y)`, `logicalXor(x, y)`, `logicalNot(x)`
-
-**Enhanced Combinators**:
-- `identity(x)`: Returns input unchanged
-- `constant(x)`: Creates constant function
-- `flip(f, x, y)`: Flips argument order
-- `each(f, x)`: Multi-argument element-wise operations
-
-#### Table Operations Namespace (`t.`)
-Immutable table operations:
-- `t.map(f, table)`: Apply function to table values
-- `t.filter(p, table)`: Filter table values
-- `t.reduce(f, init, table)`: Reduce table values
-- `t.set(table, key, value)`: Immutable set
-- `t.delete(table, key)`: Immutable delete
-- `t.merge(table1, table2)`: Immutable merge
-- `t.pairs(table)`, `t.keys(table)`, `t.values(table)`
-- `t.length(table)`, `t.has(table, key)`, `t.get(table, key, default)`
-
-#### Scope Management
-- **Global Scope**: Prototypal inheritance for variable lookup
-- **Local Scope**: Function parameters create new scope inheriting from global
-- **Forward Declaration**: Recursive functions supported through placeholder creation
-
-**Scope Management Pattern**:
-```javascript
-// Global scope: Object with standard library functions
-const globalScope = { ...initialState };
-initializeStandardLibrary(globalScope);
-
-// Local scope: Prototypal inheritance from global scope
-const localScope = Object.create(globalScope);
-// Local variables shadow global variables
-
-// Forward declaration for recursive functions:
-// 1. Create placeholder function in global scope
-// 2. Evaluate function definition (can reference placeholder)
-// 3. Replace placeholder with actual function
-```
-
-#### Evaluation Functions
-1. **`evalNode(node)`**: Global scope evaluation
-2. **`localEvalNodeWithScope(node, scope)`**: Local scope evaluation
-3. **`localEvalNode(node)`**: Internal recursion
-
-#### IO Operations
-- **`..in`**: Read from standard input
-- **`..out expression`**: Write expression result to standard output
-- **`..assert expression`**: Assert condition is true
-- **`..listen`**: Get current state from external system
-- **`..emit expression`**: Send value to external system
-
-**IO Operations Implementation**:
-```javascript
-// IO Input: Read from standard input
-case 'IOInExpression':
-    const rl = createReadline();
-    return new Promise((resolve) => {
-        rl.question('', (input) => {
-            rl.close();
-            const num = parseInt(input);
-            resolve(isNaN(num) ? input : num);
-        });
-    });
-
-// IO Output: Write to standard output
-case 'IOOutExpression':
-    const outputValue = evalNode(node.value);
-    safeConsoleLog(outputValue);
-    ioOperationsPerformed = true;
-    return outputValue;
-
-// IO Assert: Assert condition is true
-case 'IOAssertExpression':
-    const assertionValue = evalNode(node.value);
-    if (!assertionValue) {
-        throw new Error('Assertion failed');
-    }
-    return assertionValue;
-
-// IO Listen: Get current state from external system
-case 'IOListenExpression':
-    if (environment && typeof environment.getCurrentState === 'function') {
-        return environment.getCurrentState();
-    } else {
-        return { status: 'placeholder', message: 'State not available in standalone mode' };
-    }
-
-// IO Emit: Send value to external system
-case 'IOEmitExpression':
-    const emitValue = evalNode(node.value);
-    if (environment && typeof environment.emitValue === 'function') {
-        environment.emitValue(emitValue);
-    } else {
-        safeConsoleLog('[EMIT]', emitValue);
-    }
-    ioOperationsPerformed = true;
-    return emitValue;
-```
-
-## Data Types
-
-### 1. Primitives
-- **Numbers**: JavaScript numbers (integers and floats)
-- **Strings**: JavaScript strings with escape sequences
-- **Booleans**: `true` and `false`
-- **Functions**: First-class functions with partial application
-
-### 2. Tables
-- **Structure**: JavaScript objects with string/number keys
-- **Immutability**: All operations return new tables
-- **APL-style Operations**: Element-wise operations on table values
-- **Access**: Dot notation (`table.property`) and bracket notation (`table[key]`)
-
-### 3. Special Types
-- **Wildcard Pattern**: `_` (matches any value)
-- **Function References**: `@functionName`
-- **Function Arguments**: `@(expression)`
-
-## Function System
-
-### 1. Function Definitions
-```javascript
-// Arrow functions
-f : x y -> x + y;
-
-// Traditional functions
-function(x, y) : x + y;
-
-// Table functions
-{add: x y -> x + y, multiply: x y -> x * y}
-```
-
-### 2. Function Application
-- **Juxtaposition**: `f x` (left-associative)
-- **Parenthesized**: `f(x)`
-- **Composition**: `f via g` (right-associative)
-
-### 3. Partial Application
-All functions support partial application:
-```javascript
-add 5    // Returns function that adds 5
-map @add 5  // Returns function that adds 5 to each element
-```
-
-**Partial Application Implementation Pattern**:
-```javascript
-// All standard library functions follow this pattern:
-function exampleFunction(x, y) {
-    if (y === undefined) {
-        // Partial application: return a function that waits for the second argument
-        return function(y) {
-            return exampleFunction(x, y);
-        };
-    }
-    // Full application: perform the operation
-    return x + y; // or whatever the operation is
-}
-
-// This enables currying patterns:
-const addFive = add 5;        // Returns function that adds 5
-const result = addFive 3;     // Returns 8
-const double = multiply 2;    // Returns function that multiplies by 2
-const doubled = map @double;  // Returns function that doubles each element
-```
-
-## Error Handling
-
-### 1. Lexer Errors
-- Unexpected characters with line/column information
-- Malformed tokens (invalid numbers, strings, etc.)
-
-### 2. Parser Errors
-- Unexpected tokens with context
-- Missing delimiters (parentheses, braces, etc.)
-- Malformed expressions
-
-### 3. Interpreter Errors
-- Undefined variables/functions
-- Type mismatches
-- Division by zero
-- Table access errors
-- Pattern matching failures
-
-### 4. Call Stack Tracking
-Comprehensive call stack tracking for debugging:
-```javascript
-const callStackTracker = {
-    stack: [],
-    push: (functionName, context) => { /* ... */ },
-    pop: () => { /* ... */ },
-    reset: () => { /* ... */ },
-    getTrace: () => { /* ... */ }
-};
-```
-
-**Call Stack Tracking**:
-```javascript
-const callStackTracker = {
-    stack: [],
-    push: (functionName, context) => { /* ... */ },
-    pop: () => { /* ... */ },
-    reset: () => { /* ... */ },
-    getTrace: () => { /* ... */ }
-};
-```
-
-## Cross-Platform Support
-
-### 1. Environment Detection
-```javascript
-const isNode = typeof process !== 'undefined' && process.versions && process.versions.node;
-const isBun = typeof process !== 'undefined' && process.versions && process.versions.bun;
-const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
-```
-
-### 2. Platform-Specific Adapters
-- **Readline**: Node.js/Bun use `readline`, browser uses `prompt()`
-- **File System**: Node.js/Bun use `fs`, browser uses mock
-- **Console**: Safe console logging across platforms
-- **Process Exit**: Node.js/Bun use `process.exit()`, browser throws error
-
-## Debug Support
-
-### 1. Debug Mode
-```javascript
-const DEBUG = (isNode && process.env.DEBUG) || (isBrowser && window.DEBUG) || false;
-```
-
-### 2. Debug Functions
-- `debugLog(message, data)`: Safe logging across platforms
-- `debugError(message, error)`: Error logging with stack traces
-- Comprehensive debug output in parser and interpreter
-
-## External System Integration
-
-### 1. Environment Interface
-```javascript
-/**
- * @typedef {Object} Environment
- * @property {Function} getCurrentState - Returns current state from external system
- * @property {Function} emitValue - Sends value to external system
- */
-```
-
-### 2. IO Operations
-- **Listen**: `environment.getCurrentState()`
-- **Emit**: `environment.emitValue(value)`
-
-## Performance Considerations
-
-### 1. Lazy Evaluation
-- Functions are only evaluated when called
-- Partial application enables deferred execution
-
-### 2. Immutable Data
-- Tables are never modified in-place
-- New structures created for transformations
-
-### 3. Scope Optimization
-- Prototypal inheritance for efficient variable lookup
-- Local scopes inherit from global scope
-
-## Compatibility Requirements for C Implementation
-
-### 1. Token Types
-Must implement all token types from `TokenType` enumeration with identical names and semantics.
-
-### 2. AST Node Types
-Must support all AST node types with identical structure:
-- `Program`, `NumberLiteral`, `StringLiteral`, `BooleanLiteral`
-- `Identifier`, `FunctionCall`, `FunctionDeclaration`, `FunctionDefinition`
-- `Assignment`, `WhenExpression`, `WildcardPattern`
-- `TableLiteral`, `TableAccess`, `FunctionReference`
-- IO expression types (`IOInExpression`, `IOOutExpression`, etc.)
-
-### 3. Standard Library Functions
-Must implement all standard library functions with identical signatures and behavior:
-- Higher-order functions (`map`, `compose`, `apply`, etc.)
-- Arithmetic combinators (`add`, `subtract`, `multiply`, etc.)
-- Comparison combinators (`equals`, `lessThan`, etc.)
-- Logical combinators (`logicalAnd`, `logicalOr`, etc.)
-- Table operations namespace (`t.map`, `t.filter`, etc.)
-
-### 4. Operator Precedence
-Must implement identical operator precedence and associativity rules.
-
-### 5. Function Application
-Must support juxtaposition (left-associative) and composition (right-associative) with identical semantics.
-
-### 6. Pattern Matching
-Must implement `when` expressions with identical pattern matching semantics.
-
-### 7. Error Handling
-Must provide similar error messages and context information.
-
-### 8. IO Operations
-Must support all IO operations (`..in`, `..out`, `..assert`, `..listen`, `..emit`) with identical behavior.
-
-## Testing Strategy
-
-The JavaScript implementation includes comprehensive test suites that should be used to validate C implementation compatibility:
-
-1. **Lexer Tests**: Token recognition and error handling
-2. **Parser Tests**: AST generation and operator precedence
-3. **Interpreter Tests**: Expression evaluation and function behavior
-4. **Integration Tests**: End-to-end language features
-5. **Error Tests**: Error handling and reporting
-
-**Test File Structure**:
-```
-tests/
-├── 01_lexer_basic.txt
-├── 02_arithmetic_operations.txt
-├── 03_comparison_operators.txt
-├── 04_logical_operators.txt
-├── 05_io_operations.txt
-├── 06_function_definitions.txt
-├── 07_case_expressions.txt
-├── 08_first_class_functions.txt
-├── 09_tables.txt
-├── 10_standard_library.txt
-├── 11_edge_cases.txt
-├── 12_advanced_tables.txt
-├── 13_standard_library_complete.txt
-├── 14_error_handling.txt
-├── 15_performance_stress.txt
-├── 16_function_composition.txt
-├── 17_table_enhancements.txt
-├── 18_each_combinator.txt
-├── 19_embedded_functions.txt
-├── 20_via_operator.txt
-├── 21_enhanced_case_statements.txt
-├── 22_parser_limitations.txt
-├── 23_minus_operator_spacing.txt
-└── integration_*.txt
-```
-
-**Example Test Format**:
-```javascript
-// Test file: 02_arithmetic_operations.txt
-// Test basic arithmetic operations
-
-// Test addition
-x : 5 + 3;
-..out x;  // Expected: 8
-
-// Test subtraction
-y : 10 - 4;
-..out y;  // Expected: 6
-
-// Test multiplication
-z : 6 * 7;
-..out z;  // Expected: 42
-
-// Test division
-w : 20 / 4;
-..out w;  // Expected: 5
-
-// Test unary minus
-neg : -5;
-..out neg;  // Expected: -5
-
-// Test operator precedence
-result : 2 + 3 * 4;
-..out result;  // Expected: 14 (not 20)
-```
-
-**Critical Test Cases for C Implementation**:
-1. **Operator Precedence**: Ensure `2 + 3 * 4` evaluates to 14, not 20
-2. **Function Application**: Test juxtaposition `f x` vs parenthesized `f(x)`
-3. **Partial Application**: Verify `add 5` returns a function
-4. **Pattern Matching**: Test `when` expressions with various patterns
-5. **Table Operations**: Verify immutable table operations
-6. **Error Handling**: Test division by zero, undefined variables, etc.
-7. **IO Operations**: Test all IO operations (`..in`, `..out`, `..assert`, etc.)
-8. **Function Composition**: Test `via` operator and `compose` function
-9. **Scope Management**: Test variable shadowing and recursive functions
-10. **Edge Cases**: Test empty programs, malformed syntax, etc.
-
-## Conclusion
-
-The JavaScript implementation provides a robust, well-documented foundation for the baba yaga scripting language. The C implementation should maintain strict compatibility with this architecture to ensure consistent behavior across platforms and enable seamless migration between implementations.
-
-Key architectural decisions that must be preserved:
-1. Combinator foundation for all operations
-2. Functional programming paradigm with immutable data
-3. Comprehensive standard library with partial application support
-4. Pattern matching through when expressions
-5. Cross-platform IO operations
-6. Detailed error reporting and debugging support
-
-## Implementation Checklist for C Team
-
-### Phase 1: Core Infrastructure
-- [ ] Implement all token types from `TokenType` enumeration
-- [ ] Implement lexer with character-by-character scanning
-- [ ] Implement parser with recursive descent parsing
-- [ ] Implement basic AST node types
-- [ ] Implement operator precedence and associativity rules
-
-### Phase 2: Standard Library
-- [ ] Implement all arithmetic combinators (`add`, `subtract`, `multiply`, `divide`, etc.)
-- [ ] Implement all comparison combinators (`equals`, `lessThan`, etc.)
-- [ ] Implement all logical combinators (`logicalAnd`, `logicalOr`, etc.)
-- [ ] Implement higher-order functions (`map`, `compose`, `apply`, etc.)
-- [ ] Implement table operations namespace (`t.map`, `t.filter`, etc.)
-
-### Phase 3: Language Features
-- [ ] Implement function definitions and application
-- [ ] Implement partial application and currying
-- [ ] Implement `when` expressions with pattern matching
-- [ ] Implement table literals and access
-- [ ] Implement function composition with `via` operator
-
-### Phase 4: IO and Integration
-- [ ] Implement all IO operations (`..in`, `..out`, `..assert`, `..listen`, `..emit`)
-- [ ] Implement environment interface for external system integration
-- [ ] Implement cross-platform compatibility layer
-- [ ] Implement error handling and debugging support
-
-### Phase 5: Testing and Validation
-- [ ] Run all JavaScript test suites against C implementation
-- [ ] Verify identical behavior for all language constructs
-- [ ] Test edge cases and error conditions
-- [ ] Performance testing and optimization
-
-## References
-
-- **Source Files**: `lexer.js`, `parser.js`, `lang.js`
-- **Test Suite**: `tests/` directory with comprehensive test cases
-- **Documentation**: `tutorials/` directory with language tutorials
-- **Web Interface**: `web/` directory with AST viewer and interactive examples
-
-The C implementation should strive for 100% compatibility with the JavaScript version to ensure a seamless developer experience across both platforms. 
\ No newline at end of file