rei-lang 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lang/lexer.ts","../src/lang/parser.ts","../src/core/types.ts","../src/lang/evaluator.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["// ============================================================\n// Rei (0₀式) Lexer — 字句解析器\n// BNF v0.2 準拠\n// Author: Nobuki Fujimoto\n// ============================================================\n\nexport const TokenType = {\n // Literals\n NUMBER: 'NUMBER',\n STRING: 'STRING',\n EXT_LIT: 'EXT_LIT',\n SYMBOL_0_0: 'SYMBOL_0_0',\n SYMBOL_DOT_PRIM: 'SYMBOL_DOT_PRIM',\n BOOL_TRUE: 'BOOL_TRUE',\n BOOL_FALSE: 'BOOL_FALSE',\n\n // Math constants\n CONST_PI: 'CONST_PI',\n CONST_E: 'CONST_E',\n CONST_PHI: 'CONST_PHI',\n CONST_I: 'CONST_I',\n CONST_PHI_UP: 'CONST_PHI_UP',\n CONST_PSI_UP: 'CONST_PSI_UP',\n CONST_OMEGA_UP: 'CONST_OMEGA_UP',\n CONST_EMPTY: 'CONST_EMPTY',\n\n // Quad literals (v0.2)\n QUAD_TOP: 'QUAD_TOP',\n QUAD_BOT: 'QUAD_BOT',\n QUAD_TOP_PI: 'QUAD_TOP_PI',\n QUAD_BOT_PI: 'QUAD_BOT_PI',\n\n // Keywords\n LET: 'LET',\n MUT: 'MUT',\n COMPRESS: 'COMPRESS',\n WEIGHT: 'WEIGHT',\n GENESIS: 'GENESIS',\n IF: 'IF',\n THEN: 'THEN',\n ELSE: 'ELSE',\n MATCH: 'MATCH',\n CASE: 'CASE',\n WITNESSED: 'WITNESSED',\n BY: 'BY',\n TRUE: 'TRUE',\n FALSE: 'FALSE',\n NULL: 'NULL',\n TEMPORAL: 'TEMPORAL',\n TIMELESS: 'TIMELESS',\n\n // Identifiers\n IDENT: 'IDENT',\n\n // Operators\n PLUS: 'PLUS',\n MINUS: 'MINUS',\n STAR: 'STAR',\n SLASH: 'SLASH',\n OPLUS: 'OPLUS',\n OTIMES: 'OTIMES',\n CDOT: 'CDOT',\n PIPE_OP: 'PIPE_OP',\n EXTEND: 'EXTEND',\n REDUCE: 'REDUCE',\n ASSIGN: 'ASSIGN',\n DOT: 'DOT',\n ARROW: 'ARROW',\n SEMICOLON: 'SEMICOLON',\n COMMA: 'COMMA',\n COLON: 'COLON',\n LPAREN: 'LPAREN',\n RPAREN: 'RPAREN',\n LBRACE: 'LBRACE',\n RBRACE: 'RBRACE',\n LBRACKET: 'LBRACKET',\n RBRACKET: 'RBRACKET',\n CONVERGE: 'CONVERGE',\n DIVERGE: 'DIVERGE',\n REFLECT: 'REFLECT',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n GT_K: 'GT_K',\n LT_K: 'LT_K',\n EQ_K: 'EQ_K',\n GT: 'GT',\n LT: 'LT',\n EQ: 'EQ',\n NEQ: 'NEQ',\n GTE: 'GTE',\n LTE: 'LTE',\n MDIM_OPEN: 'MDIM_OPEN',\n\n // Special\n NEWLINE: 'NEWLINE',\n EOF: 'EOF',\n} as const;\n\nexport type TokenTypeValue = (typeof TokenType)[keyof typeof TokenType];\n\nexport interface Token {\n type: TokenTypeValue;\n value: string;\n line: number;\n col: number;\n}\n\nconst KEYWORDS: Record<string, TokenTypeValue> = {\n 'let': TokenType.LET,\n 'mut': TokenType.MUT,\n 'compress': TokenType.COMPRESS,\n 'weight': TokenType.WEIGHT,\n 'genesis': TokenType.GENESIS,\n 'if': TokenType.IF,\n 'then': TokenType.THEN,\n 'else': TokenType.ELSE,\n 'match': TokenType.MATCH,\n 'case': TokenType.CASE,\n 'witnessed': TokenType.WITNESSED,\n 'by': TokenType.BY,\n 'true': TokenType.TRUE,\n 'false': TokenType.FALSE,\n 'null': TokenType.NULL,\n 'Temporal': TokenType.TEMPORAL,\n 'Timeless': TokenType.TIMELESS,\n};\n\nconst SUBSCRIPT_CHARS = new Set('oxzwensbua'.split(''));\n\nexport class Lexer {\n private chars: string[];\n private pos: number = 0;\n private line: number = 1;\n private col: number = 1;\n private tokens: Token[] = [];\n\n constructor(private source: string) {\n this.chars = Array.from(source);\n }\n\n tokenize(): Token[] {\n this.tokens = [];\n while (this.pos < this.chars.length) {\n this.skipWhitespaceAndComments();\n if (this.pos >= this.chars.length) break;\n\n const ch = this.chars[this.pos];\n\n // Newline\n if (ch === '\\n') {\n this.emit(TokenType.NEWLINE, '\\n');\n this.advance();\n this.line++;\n this.col = 1;\n continue;\n }\n\n // String literal\n if (ch === '\"') { this.readString(); continue; }\n\n // 0₀ symbol\n if (ch === '0' && this.peek(1) === '₀') {\n this.emit(TokenType.SYMBOL_0_0, '0₀');\n this.advance(); this.advance();\n continue;\n }\n\n // 𝕄{ — MDim literal\n if (ch === '𝕄' && this.peek(1) === '{') {\n this.emit(TokenType.MDIM_OPEN, '𝕄{');\n this.advance(); this.advance();\n continue;\n }\n\n // Extended literals: 0ooo, πoo, eoo, φoo, ioo\n if (this.isExtStart(ch)) {\n const ext = this.readExtLit();\n if (ext) continue;\n }\n\n // Number\n if (this.isDigit(ch) || (ch === '-' && this.isDigit(this.peek(1) ?? '') && this.shouldNegateBePrefix())) {\n this.readNumber();\n continue;\n }\n\n // Math constants and Unicode operators\n if (this.readUnicodeToken(ch)) continue;\n\n // Multi-char operators\n if (this.readMultiCharOp(ch)) continue;\n\n // Single-char operators\n if (this.readSingleCharOp(ch)) continue;\n\n // Identifiers / keywords\n if (this.isIdentStart(ch)) {\n this.readIdentOrKeyword();\n continue;\n }\n\n // Skip unrecognized\n this.advance();\n }\n\n this.emit(TokenType.EOF, '');\n return this.tokens.filter(t => t.type !== TokenType.NEWLINE || false);\n }\n\n private skipWhitespaceAndComments(): void {\n while (this.pos < this.chars.length) {\n const ch = this.chars[this.pos];\n if (ch === ' ' || ch === '\\t' || ch === '\\r') {\n this.advance();\n continue;\n }\n // Line comment: //\n if (ch === '/' && this.peek(1) === '/') {\n while (this.pos < this.chars.length && this.chars[this.pos] !== '\\n') this.advance();\n continue;\n }\n // Block comment: /* */\n if (ch === '/' && this.peek(1) === '*') {\n this.advance(); this.advance();\n while (this.pos < this.chars.length) {\n if (this.chars[this.pos] === '*' && this.peek(1) === '/') {\n this.advance(); this.advance();\n break;\n }\n if (this.chars[this.pos] === '\\n') { this.line++; this.col = 0; }\n this.advance();\n }\n continue;\n }\n break;\n }\n }\n\n private readString(): void {\n const startCol = this.col;\n this.advance(); // skip opening \"\n let str = '';\n while (this.pos < this.chars.length && this.chars[this.pos] !== '\"') {\n if (this.chars[this.pos] === '\\\\' && this.pos + 1 < this.chars.length) {\n this.advance();\n const esc = this.chars[this.pos];\n if (esc === 'n') str += '\\n';\n else if (esc === 't') str += '\\t';\n else if (esc === '\\\\') str += '\\\\';\n else if (esc === '\"') str += '\"';\n else str += esc;\n } else {\n str += this.chars[this.pos];\n }\n this.advance();\n }\n if (this.pos < this.chars.length) this.advance(); // skip closing \"\n this.tokens.push({ type: TokenType.STRING, value: str, line: this.line, col: startCol });\n }\n\n private isExtStart(ch: string): boolean {\n if (ch === '0' && SUBSCRIPT_CHARS.has(this.peek(1) ?? '')) return true;\n // π and φ are unambiguous (not valid identifier starts in typical use)\n if (ch === 'π' || ch === 'φ') {\n const next = this.peek(1);\n if (next && SUBSCRIPT_CHARS.has(next)) return true;\n }\n // e and i: only treat as ext if ALL subsequent chars are subscript chars\n // (to avoid misidentifying \"energy\", \"inner\", \"each\", \"item\" etc.)\n if (ch === 'e' || ch === 'i') {\n const next = this.peek(1);\n if (!next || !SUBSCRIPT_CHARS.has(next)) return false;\n // Scan ahead: must be subscript chars only, no alphanumeric after\n let offset = 1;\n while (this.peek(offset) && SUBSCRIPT_CHARS.has(this.peek(offset)!)) offset++;\n const afterSubs = this.peek(offset);\n // If followed by alphanumeric or _, it's an identifier\n if (afterSubs && /[a-zA-Z0-9_]/.test(afterSubs)) return false;\n return true;\n }\n return false;\n }\n\n private readExtLit(): boolean {\n const startCol = this.col;\n const base = this.chars[this.pos];\n this.advance();\n let subs = '';\n while (this.pos < this.chars.length && SUBSCRIPT_CHARS.has(this.chars[this.pos])) {\n subs += this.chars[this.pos];\n this.advance();\n }\n if (subs.length > 0) {\n this.tokens.push({\n type: TokenType.EXT_LIT,\n value: base + subs,\n line: this.line,\n col: startCol,\n });\n return true;\n }\n // Not an ext lit — put back and let it be handled as something else\n this.pos--;\n this.col--;\n return false;\n }\n\n private readNumber(): void {\n const startCol = this.col;\n let num = '';\n if (this.chars[this.pos] === '-') { num += '-'; this.advance(); }\n while (this.pos < this.chars.length && this.isDigit(this.chars[this.pos])) {\n num += this.chars[this.pos];\n this.advance();\n }\n if (this.pos < this.chars.length && this.chars[this.pos] === '.' &&\n this.isDigit(this.peek(1) ?? '')) {\n num += '.';\n this.advance();\n while (this.pos < this.chars.length && this.isDigit(this.chars[this.pos])) {\n num += this.chars[this.pos];\n this.advance();\n }\n }\n this.tokens.push({ type: TokenType.NUMBER, value: num, line: this.line, col: startCol });\n }\n\n private readUnicodeToken(ch: string): boolean {\n const startCol = this.col;\n const map: [string, TokenTypeValue][] = [\n ['⊕', TokenType.OPLUS],\n ['⊗', TokenType.OTIMES],\n ['·', TokenType.CDOT],\n ['π', TokenType.CONST_PI],\n ['φ', TokenType.CONST_PHI],\n ['Φ', TokenType.CONST_PHI_UP],\n ['Ψ', TokenType.CONST_PSI_UP],\n ['Ω', TokenType.CONST_OMEGA_UP],\n ['∅', TokenType.CONST_EMPTY],\n ['⊤', TokenType.QUAD_TOP],\n ['⊥', TokenType.QUAD_BOT],\n ['⤊', TokenType.CONVERGE],\n ['⤋', TokenType.DIVERGE],\n ['◁', TokenType.REFLECT],\n ['∧', TokenType.AND],\n ['∨', TokenType.OR],\n ['¬', TokenType.NOT],\n ['・', TokenType.SYMBOL_DOT_PRIM],\n ];\n\n // Handle ⊤π and ⊥π\n if (ch === '⊤' && this.peek(1) === 'π') {\n this.emit(TokenType.QUAD_TOP_PI, '⊤π');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '⊥' && this.peek(1) === 'π') {\n this.emit(TokenType.QUAD_BOT_PI, '⊥π');\n this.advance(); this.advance();\n return true;\n }\n\n for (const [sym, type] of map) {\n if (ch === sym) {\n this.emit(type, sym);\n this.advance();\n return true;\n }\n }\n return false;\n }\n\n private readMultiCharOp(ch: string): boolean {\n const next = this.peek(1);\n\n if (ch === '|' && next === '>') {\n this.emit(TokenType.PIPE_OP, '|>');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '>' && next === '>') {\n this.emit(TokenType.EXTEND, '>>');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '<' && next === '<') {\n this.emit(TokenType.REDUCE, '<<');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '-' && next === '>') {\n this.emit(TokenType.ARROW, '->');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '=' && next === '=') {\n this.emit(TokenType.EQ, '==');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '!' && next === '=') {\n this.emit(TokenType.NEQ, '!=');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '>' && next === '=') {\n this.emit(TokenType.GTE, '>=');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '<' && next === '=') {\n this.emit(TokenType.LTE, '<=');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '>' && next === 'κ') {\n this.emit(TokenType.GT_K, '>κ');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '<' && next === 'κ') {\n this.emit(TokenType.LT_K, '<κ');\n this.advance(); this.advance();\n return true;\n }\n if (ch === '=' && next === 'κ') {\n this.emit(TokenType.EQ_K, '=κ');\n this.advance(); this.advance();\n return true;\n }\n return false;\n }\n\n private readSingleCharOp(ch: string): boolean {\n const map: Record<string, TokenTypeValue> = {\n '+': TokenType.PLUS,\n '-': TokenType.MINUS,\n '*': TokenType.STAR,\n '/': TokenType.SLASH,\n '=': TokenType.ASSIGN,\n '.': TokenType.DOT,\n ',': TokenType.COMMA,\n ':': TokenType.COLON,\n ';': TokenType.SEMICOLON,\n '(': TokenType.LPAREN,\n ')': TokenType.RPAREN,\n '{': TokenType.LBRACE,\n '}': TokenType.RBRACE,\n '[': TokenType.LBRACKET,\n ']': TokenType.RBRACKET,\n '|': TokenType.PIPE_OP,\n '>': TokenType.GT,\n '<': TokenType.LT,\n };\n const type = map[ch];\n if (type) {\n this.emit(type, ch);\n this.advance();\n return true;\n }\n return false;\n }\n\n private readIdentOrKeyword(): void {\n const startCol = this.col;\n let name = '';\n while (this.pos < this.chars.length && this.isIdentPart(this.chars[this.pos])) {\n name += this.chars[this.pos];\n this.advance();\n }\n // Check compress levels\n if (name.startsWith('compress') && name.length > 8) {\n const suffix = name.slice(8);\n if (['⁰', '¹', '²', '³', '∞'].includes(suffix)) {\n this.tokens.push({ type: TokenType.COMPRESS, value: name, line: this.line, col: startCol });\n return;\n }\n }\n const kw = KEYWORDS[name];\n if (kw) {\n this.tokens.push({ type: kw, value: name, line: this.line, col: startCol });\n } else {\n this.tokens.push({ type: TokenType.IDENT, value: name, line: this.line, col: startCol });\n }\n }\n\n // --- Helpers ---\n private advance(): void { this.pos++; this.col++; }\n private peek(offset: number): string | undefined { return this.chars[this.pos + offset]; }\n private emit(type: TokenTypeValue, value: string): void {\n this.tokens.push({ type, value, line: this.line, col: this.col });\n }\n private isDigit(ch: string): boolean { return ch >= '0' && ch <= '9'; }\n private isIdentStart(ch: string): boolean {\n return /[a-zA-Z_α-ωΑ-Ω𝕄𝕌]/.test(ch);\n }\n private isIdentPart(ch: string): boolean {\n return /[a-zA-Z0-9_α-ωΑ-Ω⁰¹²³∞𝕄𝕌]/.test(ch);\n }\n private shouldNegateBePrefix(): boolean {\n if (this.tokens.length === 0) return true;\n const last = this.tokens[this.tokens.length - 1];\n return [\n TokenType.LPAREN, TokenType.COMMA, TokenType.ASSIGN,\n TokenType.PLUS, TokenType.MINUS, TokenType.STAR, TokenType.SLASH,\n TokenType.OPLUS, TokenType.OTIMES, TokenType.PIPE_OP,\n TokenType.SEMICOLON, TokenType.LBRACKET, TokenType.COLON,\n ].includes(last.type as any);\n }\n}\n","// ============================================================\n// Rei (0₀式) Parser — 構文解析器(再帰下降)\n// BNF v0.2 準拠\n// Author: Nobuki Fujimoto\n// ============================================================\n\nimport { Token, TokenType, TokenTypeValue } from './lexer';\nimport type { ASTNode, NodeType } from '../core/types';\n\nfunction node(type: NodeType, props: Record<string, any> = {}): ASTNode {\n return { type, ...props };\n}\n\nexport class Parser {\n private pos: number = 0;\n private tokens: Token[];\n\n constructor(tokens: Token[]) {\n this.tokens = tokens.filter(t => t.type !== TokenType.NEWLINE);\n }\n\n parseProgram(): ASTNode {\n const stmts: ASTNode[] = [];\n while (!this.isAtEnd()) {\n while (this.check(TokenType.SEMICOLON)) this.advance();\n if (this.isAtEnd()) break;\n stmts.push(this.parseStatement());\n while (this.check(TokenType.SEMICOLON)) this.advance();\n }\n return node('Program', { body: stmts });\n }\n\n private parseStatement(): ASTNode {\n if (this.check(TokenType.LET)) return this.parseLetStmt();\n if (this.check(TokenType.COMPRESS)) return this.parseCompressDef();\n return this.parseExpression();\n }\n\n // --- let [mut] name [: type] = expr [witnessed by \"...\"] ---\n private parseLetStmt(): ASTNode {\n this.expect(TokenType.LET);\n const mutable = this.match(TokenType.MUT);\n const name = this.expect(TokenType.IDENT).value;\n\n // Optional type annotation\n let typeAnnotation: string | null = null;\n let phaseGuard: string | null = null;\n if (this.match(TokenType.COLON)) {\n typeAnnotation = this.expect(TokenType.IDENT).value;\n // Check for phase guard @phase\n if (this.check(TokenType.IDENT) && this.peek().value.startsWith('@')) {\n phaseGuard = this.advance().value.slice(1);\n }\n }\n\n this.expect(TokenType.ASSIGN);\n const init = this.parseExpression();\n\n // Optional witness clause\n let witness: string | null = null;\n if (this.match(TokenType.WITNESSED)) {\n this.expect(TokenType.BY);\n witness = this.expect(TokenType.STRING).value;\n }\n\n return node(mutable ? 'MutStmt' : 'LetStmt', {\n name, init, typeAnnotation, phaseGuard, witness,\n });\n }\n\n // --- compress [level] name(params) [-> type] = body ---\n private parseCompressDef(): ASTNode {\n const compressToken = this.expect(TokenType.COMPRESS);\n const level = this.parseCompressLevel(compressToken.value);\n const name = this.expect(TokenType.IDENT).value;\n\n this.expect(TokenType.LPAREN);\n const params: string[] = [];\n if (!this.check(TokenType.RPAREN)) {\n params.push(this.parseParamDecl());\n while (this.match(TokenType.COMMA)) {\n params.push(this.parseParamDecl());\n }\n }\n this.expect(TokenType.RPAREN);\n\n // Optional return type\n let returnType: string | null = null;\n if (this.match(TokenType.ARROW)) {\n returnType = this.expect(TokenType.IDENT).value;\n }\n\n this.expect(TokenType.ASSIGN);\n const body = this.parseExpression();\n\n return node('CompressDef', { name, params, body, level, returnType });\n }\n\n private parseCompressLevel(value: string): number {\n if (value === 'compress') return -1; // default\n const suffixMap: Record<string, number> = {\n 'compress⁰': 0, 'compress¹': 1, 'compress²': 2,\n 'compress³': 3, 'compress∞': Infinity,\n };\n return suffixMap[value] ?? -1;\n }\n\n private parseParamDecl(): string {\n // Accept IDENT, or math constant names used as param names (e, i)\n let name: string;\n if (this.check(TokenType.IDENT)) {\n name = this.advance().value;\n } else if (this.check(TokenType.CONST_E)) {\n name = this.advance().value;\n } else if (this.check(TokenType.CONST_I)) {\n name = this.advance().value;\n } else {\n name = this.expect(TokenType.IDENT).value;\n }\n // Optional type annotation\n if (this.match(TokenType.COLON)) {\n this.expect(TokenType.IDENT); // consume type name\n }\n return name;\n }\n\n // --- Expression hierarchy (low → high precedence) ---\n\n private parseExpression(): ASTNode {\n return this.parsePipe();\n }\n\n // Level 1: |> pipe, ◁ reflect\n private parsePipe(): ASTNode {\n let left = this.parseLogicOr();\n while (this.check(TokenType.PIPE_OP) || this.check(TokenType.REFLECT)) {\n if (this.match(TokenType.PIPE_OP)) {\n // Pipe command: expr |> command [:mode] [args]\n const cmd = this.parsePipeCommand();\n left = node('Pipe', { input: left, command: cmd });\n } else if (this.match(TokenType.REFLECT)) {\n const right = this.parseLogicOr();\n left = node('ReflectOp', { left, right });\n }\n }\n return left;\n }\n\n private parsePipeCommand(): ASTNode {\n // command can be: ident, ident :mode, ident(args)\n if (this.check(TokenType.IDENT) || this.check(TokenType.GENESIS)) {\n const cmd = this.advance().value;\n let mode: string | null = null;\n let args: ASTNode[] = [];\n\n // :mode\n if (this.match(TokenType.COLON)) {\n mode = this.expect(TokenType.IDENT).value;\n }\n\n // (args)\n if (this.match(TokenType.LPAREN)) {\n if (!this.check(TokenType.RPAREN)) {\n args.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) args.push(this.parseExpression());\n }\n this.expect(TokenType.RPAREN);\n }\n\n return node('PipeCmd', { cmd, mode, args });\n }\n // Converge/Diverge\n if (this.match(TokenType.CONVERGE)) return node('PipeCmd', { cmd: '⤊', mode: null, args: [] });\n if (this.match(TokenType.DIVERGE)) return node('PipeCmd', { cmd: '⤋', mode: null, args: [] });\n\n throw this.error('パイプコマンドが必要');\n }\n\n // Level 2: ∧ ∨ (logic)\n private parseLogicOr(): ASTNode {\n let left = this.parseLogicAnd();\n while (this.match(TokenType.OR)) {\n const right = this.parseLogicAnd();\n left = node('BinOp', { op: '∨', left, right });\n }\n return left;\n }\n\n private parseLogicAnd(): ASTNode {\n let left = this.parseComparison();\n while (this.match(TokenType.AND)) {\n const right = this.parseComparison();\n left = node('BinOp', { op: '∧', left, right });\n }\n return left;\n }\n\n // Level 3: >κ <κ =κ == != > < >= <=\n private parseComparison(): ASTNode {\n let left = this.parseAddition();\n const compOps = [\n TokenType.GT_K, TokenType.LT_K, TokenType.EQ_K,\n TokenType.EQ, TokenType.NEQ,\n TokenType.GT, TokenType.LT, TokenType.GTE, TokenType.LTE,\n ];\n while (compOps.some(op => this.check(op))) {\n const opToken = this.advance();\n const right = this.parseAddition();\n left = node('BinOp', { op: opToken.value, left, right });\n }\n return left;\n }\n\n // Level 4: + - ⊕\n private parseAddition(): ASTNode {\n let left = this.parseMultiplication();\n while (this.check(TokenType.PLUS) || this.check(TokenType.MINUS) || this.check(TokenType.OPLUS)) {\n const op = this.advance().value;\n const right = this.parseMultiplication();\n left = node('BinOp', { op, left, right });\n }\n return left;\n }\n\n // Level 5: * / ⊗ ·\n private parseMultiplication(): ASTNode {\n let left = this.parseExtendReduce();\n while (this.check(TokenType.STAR) || this.check(TokenType.SLASH) ||\n this.check(TokenType.OTIMES) || this.check(TokenType.CDOT)) {\n const op = this.advance().value;\n const right = this.parseExtendReduce();\n left = node('BinOp', { op, left, right });\n }\n return left;\n }\n\n // Level 6: >> << ⤊ ⤋\n private parseExtendReduce(): ASTNode {\n let left = this.parseUnary();\n while (true) {\n if (this.match(TokenType.EXTEND)) {\n // >> :subscript or >> expr\n if (this.match(TokenType.COLON)) {\n const sub = this.expect(TokenType.IDENT).value;\n left = node('Extend', { target: left, subscript: sub });\n } else {\n const right = this.parseUnary();\n left = node('Extend', { target: left, expr: right });\n }\n } else if (this.match(TokenType.REDUCE)) {\n left = node('Reduce', { target: left });\n } else if (this.match(TokenType.CONVERGE)) {\n const right = this.parseUnary();\n left = node('ConvergeOp', { left, right });\n } else if (this.match(TokenType.DIVERGE)) {\n const right = this.parseUnary();\n left = node('DivergeOp', { left, right });\n } else {\n break;\n }\n }\n return left;\n }\n\n // Level 7: unary ¬ -\n private parseUnary(): ASTNode {\n if (this.match(TokenType.NOT)) {\n const operand = this.parseUnary();\n return node('UnaryOp', { op: '¬', operand });\n }\n if (this.check(TokenType.MINUS) && this.shouldNegateBePrefix()) {\n this.advance();\n const operand = this.parseUnary();\n return node('UnaryOp', { op: '-', operand });\n }\n return this.parsePostfix();\n }\n\n // Level 8: . member access, [index], (call)\n private parsePostfix(): ASTNode {\n let left = this.parsePrimary();\n while (true) {\n if (this.match(TokenType.DOT)) {\n if (this.check(TokenType.IDENT)) {\n const member = this.advance().value;\n // Check for κ suffix\n if (this.match(TokenType.DOT) && this.check(TokenType.IDENT) && this.peek().value === 'κ') {\n this.advance();\n left = node('MemberAccess', { object: left, member, kappa: true });\n } else {\n left = node('MemberAccess', { object: left, member, kappa: false });\n }\n }\n } else if (this.match(TokenType.LPAREN)) {\n // Function call\n const args: ASTNode[] = [];\n if (!this.check(TokenType.RPAREN)) {\n args.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) args.push(this.parseExpression());\n }\n this.expect(TokenType.RPAREN);\n left = node('FnCall', { callee: left, args });\n } else if (this.match(TokenType.LBRACKET)) {\n const index = this.parseExpression();\n this.expect(TokenType.RBRACKET);\n left = node('IndexAccess', { object: left, index });\n } else {\n break;\n }\n }\n return left;\n }\n\n // --- Primary expressions ---\n private parsePrimary(): ASTNode {\n // Number literal\n if (this.check(TokenType.NUMBER)) {\n const val = this.advance().value;\n return node('NumLit', { value: parseFloat(val) });\n }\n\n // String literal\n if (this.check(TokenType.STRING)) {\n return node('StrLit', { value: this.advance().value });\n }\n\n // Boolean\n if (this.match(TokenType.TRUE)) return node('BoolLit', { value: true });\n if (this.match(TokenType.FALSE)) return node('BoolLit', { value: false });\n\n // Null\n if (this.match(TokenType.NULL)) return node('NullLit', {});\n\n // Extended literal\n if (this.check(TokenType.EXT_LIT)) {\n const val = this.advance().value;\n return node('ExtLit', { raw: val });\n }\n\n // 0₀\n if (this.match(TokenType.SYMBOL_0_0)) {\n return node('ExtLit', { raw: '0₀' });\n }\n\n // ・ (primordial dot)\n if (this.match(TokenType.SYMBOL_DOT_PRIM)) {\n return node('ConstLit', { value: '・' });\n }\n\n // Math constants\n if (this.match(TokenType.CONST_PI)) return node('NumLit', { value: Math.PI });\n if (this.match(TokenType.CONST_E)) return node('NumLit', { value: Math.E });\n if (this.match(TokenType.CONST_PHI)) return node('NumLit', { value: (1 + Math.sqrt(5)) / 2 });\n if (this.match(TokenType.CONST_I)) return node('ConstLit', { value: 'i' });\n if (this.match(TokenType.CONST_EMPTY)) return node('ConstLit', { value: '∅' });\n if (this.match(TokenType.CONST_PHI_UP)) return node('ConstLit', { value: 'Φ' });\n if (this.match(TokenType.CONST_PSI_UP)) return node('ConstLit', { value: 'Ψ' });\n if (this.match(TokenType.CONST_OMEGA_UP)) return node('ConstLit', { value: 'Ω' });\n\n // Quad literals\n if (this.match(TokenType.QUAD_TOP)) return node('QuadLit', { value: 'top' });\n if (this.match(TokenType.QUAD_BOT)) return node('QuadLit', { value: 'bottom' });\n if (this.match(TokenType.QUAD_TOP_PI)) return node('QuadLit', { value: 'topPi' });\n if (this.match(TokenType.QUAD_BOT_PI)) return node('QuadLit', { value: 'bottomPi' });\n\n // 𝕄{ MDim literal\n if (this.match(TokenType.MDIM_OPEN)) {\n return this.parseMDimLit();\n }\n\n // Array literal [...]\n if (this.match(TokenType.LBRACKET)) {\n const elems: ASTNode[] = [];\n if (!this.check(TokenType.RBRACKET)) {\n elems.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) elems.push(this.parseExpression());\n }\n this.expect(TokenType.RBRACKET);\n return node('ArrayLit', { elements: elems });\n }\n\n // Parenthesized expression\n if (this.match(TokenType.LPAREN)) {\n const expr = this.parseExpression();\n this.expect(TokenType.RPAREN);\n return expr;\n }\n\n // If expression\n if (this.check(TokenType.IF)) return this.parseIfExpr();\n\n // Match expression\n if (this.check(TokenType.MATCH)) return this.parseMatchExpr();\n\n // Genesis\n if (this.check(TokenType.GENESIS)) {\n this.advance();\n if (this.match(TokenType.LPAREN)) {\n this.expect(TokenType.RPAREN);\n }\n return node('FnCall', { callee: node('Ident', { name: 'genesis' }), args: [] });\n }\n\n // Identifier\n if (this.check(TokenType.IDENT)) {\n const name = this.advance().value;\n return node('Ident', { name });\n }\n\n throw this.error(`予期しないトークン: ${this.peek().value} (${this.peek().type})`);\n }\n\n // --- MDim literal: 𝕄{center; n1, n2, ... [weight w] [mode]} ---\n private parseMDimLit(): ASTNode {\n const center = this.parseExpression();\n this.expect(TokenType.SEMICOLON);\n const neighbors: ASTNode[] = [];\n neighbors.push(this.parseExpression());\n while (this.match(TokenType.COMMA)) {\n if (this.check(TokenType.RBRACE)) break;\n if (this.check(TokenType.WEIGHT)) break;\n neighbors.push(this.parseExpression());\n }\n\n // Optional weight\n let weight: ASTNode | null = null;\n if (this.match(TokenType.WEIGHT)) {\n weight = this.parseExpression();\n }\n\n // Optional mode\n let mode: string = 'weighted';\n if (this.match(TokenType.COLON)) {\n if (this.check(TokenType.IDENT)) {\n mode = this.advance().value;\n }\n }\n\n this.expect(TokenType.RBRACE);\n return node('MDimLit', { center, neighbors, weight, mode });\n }\n\n // --- if expr then expr else expr ---\n private parseIfExpr(): ASTNode {\n this.expect(TokenType.IF);\n const cond = this.parseExpression();\n this.expect(TokenType.THEN);\n const then = this.parseExpression();\n this.expect(TokenType.ELSE);\n const elseExpr = this.parseExpression();\n return node('IfExpr', { cond, then, else: elseExpr });\n }\n\n // --- match expr { case pat -> expr, ... } ---\n private parseMatchExpr(): ASTNode {\n this.expect(TokenType.MATCH);\n const target = this.parseExpression();\n this.expect(TokenType.LBRACE);\n const cases: { pattern: ASTNode; body: ASTNode }[] = [];\n while (!this.check(TokenType.RBRACE) && !this.isAtEnd()) {\n this.expect(TokenType.CASE);\n const pattern = this.parsePrimary();\n this.expect(TokenType.ARROW);\n const body = this.parseExpression();\n cases.push({ pattern, body });\n this.match(TokenType.COMMA);\n }\n this.expect(TokenType.RBRACE);\n return node('MatchExpr', { target, cases });\n }\n\n // --- Helpers ---\n private peek(): Token { return this.tokens[this.pos] || { type: TokenType.EOF, value: '', line: 0, col: 0 }; }\n private isAtEnd(): boolean { return this.peek().type === TokenType.EOF; }\n private check(type: TokenTypeValue): boolean { return this.peek().type === type; }\n private checkAhead(type: TokenTypeValue, offset: number): boolean {\n const idx = this.pos + offset;\n return idx < this.tokens.length && this.tokens[idx].type === type;\n }\n private advance(): Token { const t = this.tokens[this.pos]; this.pos++; return t; }\n private match(type: TokenTypeValue): boolean {\n if (this.check(type)) { this.advance(); return true; }\n return false;\n }\n private expect(type: TokenTypeValue): Token {\n if (this.check(type)) return this.advance();\n const t = this.peek();\n throw this.error(`期待: ${type}, 実際: ${t.type} (\"${t.value}\")`);\n }\n private error(msg: string): Error {\n const t = this.peek();\n return new Error(`[行 ${t.line}:${t.col}] 構文エラー: ${msg}`);\n }\n private shouldNegateBePrefix(): boolean {\n if (this.pos === 0) return true;\n const prev = this.tokens[this.pos - 1];\n return [\n TokenType.LPAREN, TokenType.COMMA, TokenType.ASSIGN,\n TokenType.PLUS, TokenType.MINUS, TokenType.STAR, TokenType.SLASH,\n TokenType.OPLUS, TokenType.OTIMES, TokenType.PIPE_OP,\n TokenType.SEMICOLON, TokenType.LBRACKET, TokenType.COLON,\n ].includes(prev.type as any);\n }\n}\n","// ============================================================\n// Rei (0₀式) Core Type Definitions\n// D-FUMT Multi-Dimensional Number System Theory\n// Author: Nobuki Fujimoto\n// ============================================================\n\n// --- Computation Modes (4計算モード) ---\nexport type ComputationMode = 'weighted' | 'multiplicative' | 'harmonic' | 'exponential';\n\n// --- Compress Modes (5縮約モード) ---\nexport type CompressMode = 'zero' | 'pi' | 'e' | 'phi' | 'default';\n\n// --- Multi-Dimensional Number (多次元数) ---\nexport interface MultiDimNumber {\n readonly reiType: 'MDim';\n readonly center: number;\n readonly neighbors: number[];\n readonly mode: ComputationMode;\n readonly weights?: number[];\n}\n\n// --- Extended Number (拡張数) ---\nexport interface ReiExtended {\n readonly reiType: 'Ext';\n readonly base: number; // 0, π, e, φ\n readonly order: number; // 添字の次数 (oの数)\n readonly subscripts: string; // 添字文字列\n valStar(): number; // val* 数値射影\n}\n\n// --- Genesis State (生成公理系) ---\nexport type GenesisPhase = 'void' | 'dot' | 'line' | 'surface' | 'solid' | 'omega';\n\nexport interface GenesisState {\n readonly reiType: 'State';\n state: GenesisPhase;\n omega: number;\n history: GenesisPhase[];\n}\n\n// --- Function (compress定義) ---\nexport interface ReiFunction {\n readonly reiType: 'Function';\n readonly name: string;\n readonly params: string[];\n readonly body: ASTNode;\n readonly closure: Environment;\n}\n\n// --- Phase Guard ---\nexport type PhaseTag = 'open' | 'sealed' | 'compacted' | 'published';\n\nexport interface PhaseGuard {\n readonly phase: PhaseTag;\n}\n\n// --- Temporal types (v0.2) ---\nexport interface Temporal<T> {\n readonly reiType: 'Temporal';\n readonly value: T;\n readonly timestamp: number;\n}\n\nexport interface Timeless<T> {\n readonly reiType: 'Timeless';\n readonly value: T;\n}\n\n// --- Quad (四価0π) ---\nexport type QuadValue = 'top' | 'bottom' | 'topPi' | 'bottomPi';\n\nexport interface Quad {\n readonly reiType: 'Quad';\n readonly value: QuadValue;\n}\n\n// --- ReiValue union ---\nexport type ReiValue =\n | number\n | string\n | boolean\n | null\n | MultiDimNumber\n | ReiExtended\n | GenesisState\n | ReiFunction\n | Temporal<any>\n | Timeless<any>\n | Quad\n | ReiValue[];\n\n// --- AST Node Types ---\nexport type NodeType =\n | 'Program'\n | 'NumLit' | 'StrLit' | 'BoolLit' | 'NullLit'\n | 'ExtLit' | 'MDimLit' | 'QuadLit' | 'ConstLit'\n | 'Ident' | 'LetStmt' | 'MutStmt'\n | 'BinOp' | 'UnaryOp' | 'Pipe' | 'Extend' | 'Reduce'\n | 'CompressDef' | 'FnCall' | 'PipeCmd'\n | 'MemberAccess' | 'Subscript'\n | 'ArrayLit' | 'IndexAccess'\n | 'Block' | 'IfExpr' | 'MatchExpr'\n | 'WitnessClause' | 'PhaseGuardNode'\n | 'ConvergeOp' | 'DivergeOp' | 'ReflectOp'\n | 'TemporalWrap' | 'TimelessWrap';\n\nexport interface ASTNode {\n type: NodeType;\n [key: string]: any;\n}\n\n// --- Environment (scope chain) ---\nexport interface Binding {\n value: ReiValue;\n mutable: boolean;\n}\n\nexport class Environment {\n private bindings: Map<string, Binding> = new Map();\n constructor(public parent: Environment | null = null) {}\n\n define(name: string, value: ReiValue, mutable: boolean = false): void {\n this.bindings.set(name, { value, mutable });\n }\n\n get(name: string): ReiValue {\n const b = this.bindings.get(name);\n if (b) return b.value;\n if (this.parent) return this.parent.get(name);\n throw new Error(`未定義の変数: ${name}`);\n }\n\n set(name: string, value: ReiValue): void {\n const b = this.bindings.get(name);\n if (b) {\n if (!b.mutable) throw new Error(`不変の変数に代入: ${name}`);\n b.value = value;\n return;\n }\n if (this.parent) { this.parent.set(name, value); return; }\n throw new Error(`未定義の変数: ${name}`);\n }\n\n has(name: string): boolean {\n if (this.bindings.has(name)) return true;\n if (this.parent) return this.parent.has(name);\n return false;\n }\n\n getBinding(name: string): Binding | null {\n const b = this.bindings.get(name);\n if (b) return b;\n if (this.parent) return this.parent.getBinding(name);\n return null;\n }\n\n allBindings(): Map<string, Binding> {\n const all = new Map<string, Binding>();\n if (this.parent) {\n for (const [k, v] of this.parent.allBindings()) all.set(k, v);\n }\n for (const [k, v] of this.bindings) all.set(k, v);\n return all;\n }\n}\n","// ============================================================\n// Rei (0₀式) Evaluator — 評価器\n// BNF v0.2 準拠\n// Author: Nobuki Fujimoto\n// ============================================================\n\nimport type {\n ASTNode, ReiValue, MultiDimNumber, ReiExtended, GenesisState,\n ReiFunction, Quad, QuadValue, ComputationMode, Environment as EnvType,\n} from '../core/types';\nimport { Environment } from '../core/types';\n\n// --- Extended number implementation ---\nfunction createExtended(base: number, subscripts: string): ReiExtended {\n const order = subscripts.length;\n return {\n reiType: 'Ext',\n base,\n order,\n subscripts,\n valStar() {\n // val* — numeric projection: base ^ (1/10^order) for base=0 → order-based\n if (base === 0) return Math.pow(0.1, order);\n return base * Math.pow(0.1, order);\n },\n };\n}\n\nfunction parseExtLit(raw: string): ReiExtended {\n if (raw === '0₀') return createExtended(0, 'o');\n const baseChar = raw[0];\n const subs = raw.slice(1);\n const baseMap: Record<string, number> = {\n '0': 0, 'π': Math.PI, 'e': Math.E, 'φ': (1 + Math.sqrt(5)) / 2, 'i': NaN,\n };\n return createExtended(baseMap[baseChar] ?? 0, subs);\n}\n\n// --- MDim computation ---\nfunction computeMDim(md: MultiDimNumber): number {\n const { center, neighbors, mode } = md;\n const weights = md.weights ?? neighbors.map(() => 1);\n const n = neighbors.length;\n if (n === 0) return center;\n\n switch (mode) {\n case 'weighted': {\n const wSum = weights.reduce((a, b) => a + b, 0);\n const wAvg = neighbors.reduce((sum, v, i) => sum + weights[i] * v, 0) / (wSum || 1);\n return center + wAvg;\n }\n case 'multiplicative': {\n const prod = neighbors.reduce((p, v) => p * (1 + v), 1);\n return center * prod;\n }\n case 'harmonic': {\n const harmSum = neighbors.reduce((s, v) => s + 1 / (Math.abs(v) || 1), 0);\n return center + n / harmSum;\n }\n case 'exponential': {\n const expSum = neighbors.reduce((s, v) => s + Math.exp(v), 0);\n return center * (expSum / n);\n }\n default:\n return center;\n }\n}\n\n// --- Quad logic (四価0π) ---\nfunction quadNot(v: QuadValue): QuadValue {\n const map: Record<QuadValue, QuadValue> = {\n 'top': 'bottom', 'bottom': 'top', 'topPi': 'bottomPi', 'bottomPi': 'topPi',\n };\n return map[v];\n}\n\nfunction quadAnd(a: QuadValue, b: QuadValue): QuadValue {\n if (a === 'bottom' || b === 'bottom') return 'bottom';\n if (a === 'bottomPi' || b === 'bottomPi') return 'bottomPi';\n if (a === 'top' && b === 'top') return 'top';\n if (a === 'topPi' || b === 'topPi') return 'topPi';\n return 'top';\n}\n\nfunction quadOr(a: QuadValue, b: QuadValue): QuadValue {\n if (a === 'top' || b === 'top') return 'top';\n if (a === 'topPi' || b === 'topPi') return 'topPi';\n if (a === 'bottom' && b === 'bottom') return 'bottom';\n return 'bottomPi';\n}\n\n// --- Genesis ---\nfunction createGenesis(): GenesisState {\n return { reiType: 'State', state: 'void', omega: 0, history: ['void'] };\n}\n\nconst PHASE_ORDER: GenesisState['state'][] = ['void', 'dot', 'line', 'surface', 'solid', 'omega'];\n\nfunction genesisForward(g: GenesisState): void {\n const idx = PHASE_ORDER.indexOf(g.state);\n if (idx < PHASE_ORDER.length - 1) {\n g.state = PHASE_ORDER[idx + 1];\n g.history.push(g.state);\n if (g.state === 'omega') g.omega = 1;\n }\n}\n\nexport class Evaluator {\n public env: Environment;\n\n constructor(parent?: Environment) {\n this.env = new Environment(parent ?? null);\n this.registerBuiltins();\n }\n\n private registerBuiltins(): void {\n // Math constants\n this.env.define('e', Math.E);\n this.env.define('PI', Math.PI);\n\n // Genesis constructor\n this.env.define('genesis', {\n reiType: 'Function', name: 'genesis', params: [],\n body: null as any, closure: this.env,\n } as any);\n\n // Math builtins\n const mathFns = ['abs', 'sqrt', 'sin', 'cos', 'log', 'exp', 'floor', 'ceil', 'round', 'min', 'max', 'len', 'print'];\n for (const name of mathFns) {\n this.env.define(name, {\n reiType: 'Function', name, params: ['x'],\n body: null as any, closure: this.env,\n } as any);\n }\n }\n\n eval(ast: ASTNode): ReiValue {\n switch (ast.type) {\n case 'Program': return this.evalProgram(ast);\n case 'NumLit': return ast.value;\n case 'StrLit': return ast.value;\n case 'BoolLit': return ast.value;\n case 'NullLit': return null;\n case 'ExtLit': return parseExtLit(ast.raw);\n case 'ConstLit': return this.evalConstLit(ast);\n case 'QuadLit': return { reiType: 'Quad', value: ast.value } as Quad;\n case 'MDimLit': return this.evalMDimLit(ast);\n case 'ArrayLit': return ast.elements.map((e: ASTNode) => this.eval(e));\n case 'Ident': return this.env.get(ast.name);\n case 'LetStmt': return this.evalLetStmt(ast);\n case 'MutStmt': return this.evalMutStmt(ast);\n case 'CompressDef': return this.evalCompressDef(ast);\n case 'BinOp': return this.evalBinOp(ast);\n case 'UnaryOp': return this.evalUnaryOp(ast);\n case 'Pipe': return this.evalPipe(ast);\n case 'FnCall': return this.evalFnCall(ast);\n case 'MemberAccess': return this.evalMemberAccess(ast);\n case 'IndexAccess': return this.evalIndexAccess(ast);\n case 'Extend': return this.evalExtend(ast);\n case 'Reduce': return this.evalReduce(ast);\n case 'ConvergeOp': return this.evalConverge(ast);\n case 'DivergeOp': return this.evalDiverge(ast);\n case 'ReflectOp': return this.evalReflect(ast);\n case 'IfExpr': return this.evalIfExpr(ast);\n case 'MatchExpr': return this.evalMatchExpr(ast);\n default:\n throw new Error(`未実装のノード型: ${ast.type}`);\n }\n }\n\n private evalProgram(ast: ASTNode): ReiValue {\n let result: ReiValue = null;\n for (const stmt of ast.body) {\n result = this.eval(stmt);\n }\n return result;\n }\n\n private evalConstLit(ast: ASTNode): ReiValue {\n switch (ast.value) {\n case '・': return createGenesis(); // 原初点\n case '∅': return null;\n case 'i': return { reiType: 'Ext', base: NaN, order: 0, subscripts: '', valStar: () => NaN } as ReiExtended;\n case 'Φ': return 'Φ'; // phase constants\n case 'Ψ': return 'Ψ';\n case 'Ω': return 'Ω';\n default: return null;\n }\n }\n\n private evalMDimLit(ast: ASTNode): MultiDimNumber {\n const center = this.toNumber(this.eval(ast.center));\n const neighbors = ast.neighbors.map((n: ASTNode) => this.toNumber(this.eval(n)));\n const weights = ast.weight ? [this.toNumber(this.eval(ast.weight))] : undefined;\n const mode = (ast.mode || 'weighted') as ComputationMode;\n return { reiType: 'MDim', center, neighbors, mode, weights };\n }\n\n private evalLetStmt(ast: ASTNode): ReiValue {\n const val = this.eval(ast.init);\n this.env.define(ast.name, val, false);\n return val;\n }\n\n private evalMutStmt(ast: ASTNode): ReiValue {\n const val = this.eval(ast.init);\n this.env.define(ast.name, val, true);\n return val;\n }\n\n private evalCompressDef(ast: ASTNode): ReiFunction {\n const fn: ReiFunction = {\n reiType: 'Function',\n name: ast.name,\n params: ast.params,\n body: ast.body,\n closure: this.env,\n };\n this.env.define(ast.name, fn);\n return fn;\n }\n\n private evalBinOp(ast: ASTNode): ReiValue {\n const left = this.eval(ast.left);\n const right = this.eval(ast.right);\n\n // Quad logic\n if (this.isQuad(left) && this.isQuad(right)) {\n const lq = (left as Quad).value;\n const rq = (right as Quad).value;\n switch (ast.op) {\n case '∧': return { reiType: 'Quad', value: quadAnd(lq, rq) } as Quad;\n case '∨': return { reiType: 'Quad', value: quadOr(lq, rq) } as Quad;\n }\n }\n\n // Extended ⊕ Extended\n if (this.isExt(left) && this.isExt(right) && ast.op === '⊕') {\n const le = left as ReiExtended;\n const re = right as ReiExtended;\n return createExtended(le.base + re.base, le.subscripts + re.subscripts);\n }\n\n // Scalar · Extended\n if (typeof left === 'number' && this.isExt(right) && ast.op === '·') {\n const re = right as ReiExtended;\n return createExtended(left * re.base, re.subscripts);\n }\n\n // MDim ⊕ MDim\n if (this.isMDim(left) && this.isMDim(right) && ast.op === '⊕') {\n const lm = left as MultiDimNumber;\n const rm = right as MultiDimNumber;\n const maxLen = Math.max(lm.neighbors.length, rm.neighbors.length);\n const neighbors: number[] = [];\n for (let i = 0; i < maxLen; i++) {\n neighbors.push((lm.neighbors[i] ?? 0) + (rm.neighbors[i] ?? 0));\n }\n return { reiType: 'MDim', center: lm.center + rm.center, neighbors, mode: lm.mode } as MultiDimNumber;\n }\n\n // String concatenation\n if (typeof left === 'string' && typeof right === 'string' && ast.op === '+') {\n return left + right;\n }\n\n // Numeric operations\n const l = this.toNumber(left);\n const r = this.toNumber(right);\n\n switch (ast.op) {\n case '+': return l + r;\n case '-': return l - r;\n case '*': return l * r;\n case '/': return r === 0 ? NaN : l / r;\n case '⊕': return l + r;\n case '⊗': return l * r;\n case '·': return l * r;\n case '==': return l === r;\n case '!=': return l !== r;\n case '>': return l > r;\n case '<': return l < r;\n case '>=': return l >= r;\n case '<=': return l <= r;\n case '>κ': return l > r;\n case '<κ': return l < r;\n case '=κ': return l === r;\n case '∧': return (!!left) && (!!right);\n case '∨': return (!!left) || (!!right);\n default:\n throw new Error(`未知の演算子: ${ast.op}`);\n }\n }\n\n private evalUnaryOp(ast: ASTNode): ReiValue {\n const operand = this.eval(ast.operand);\n switch (ast.op) {\n case '-': return -this.toNumber(operand);\n case '¬':\n if (this.isQuad(operand)) {\n return { reiType: 'Quad', value: quadNot((operand as Quad).value) } as Quad;\n }\n return !operand;\n default:\n throw new Error(`未知の単項演算子: ${ast.op}`);\n }\n }\n\n private evalPipe(ast: ASTNode): ReiValue {\n const input = this.eval(ast.input);\n const cmd = ast.command;\n\n if (cmd.type === 'PipeCmd') {\n return this.execPipeCmd(input, cmd);\n }\n throw new Error('無効なパイプコマンド');\n }\n\n private execPipeCmd(input: ReiValue, cmd: ASTNode): ReiValue {\n const { cmd: cmdName, mode, args: argNodes } = cmd;\n const args = (argNodes as ASTNode[]).map((a: ASTNode) => this.eval(a));\n\n // MDim pipe commands\n if (this.isMDim(input)) {\n const md = input as MultiDimNumber;\n switch (cmdName) {\n case 'compute': {\n const m = (mode || md.mode) as ComputationMode;\n return computeMDim({ ...md, mode: m });\n }\n case 'center': return md.center;\n case 'neighbors': return md.neighbors;\n case 'dim': return md.neighbors.length;\n case 'normalize': {\n const sum = md.neighbors.reduce((a, b) => a + Math.abs(b), 0) || 1;\n return {\n reiType: 'MDim', center: md.center,\n neighbors: md.neighbors.map(n => n / sum),\n mode: md.mode,\n } as MultiDimNumber;\n }\n case 'flatten': return computeMDim(md);\n case 'map': {\n if (args.length > 0 && this.isFunction(args[0])) {\n const fn = args[0] as ReiFunction;\n const newNeighbors = md.neighbors.map(n => this.toNumber(this.callFunction(fn, [n])));\n return { ...md, neighbors: newNeighbors } as MultiDimNumber;\n }\n return md;\n }\n }\n }\n\n // Extended pipe commands\n if (this.isExt(input)) {\n const ext = input as ReiExtended;\n switch (cmdName) {\n case 'order': return ext.order;\n case 'base': return ext.base;\n case 'valStar':\n case 'val': return ext.valStar();\n case 'subscripts': return ext.subscripts;\n }\n }\n\n // Genesis pipe commands\n if (this.isGenesis(input)) {\n const g = input as GenesisState;\n switch (cmdName) {\n case 'forward': genesisForward(g); return g;\n case 'phase': return g.state;\n case 'history': return g.history as unknown as ReiValue;\n case 'omega': return g.omega;\n }\n }\n\n // Array pipe commands\n if (Array.isArray(input)) {\n switch (cmdName) {\n case 'len': return input.length;\n case 'sum': return input.reduce((a: number, b) => a + this.toNumber(b), 0);\n case 'avg': return input.length === 0 ? 0 : input.reduce((a: number, b) => a + this.toNumber(b), 0) / input.length;\n case 'first': return input[0] ?? null;\n case 'last': return input[input.length - 1] ?? null;\n case 'reverse': return [...input].reverse();\n case 'sort': return [...input].sort((a, b) => this.toNumber(a) - this.toNumber(b));\n case 'map': {\n if (args.length > 0 && this.isFunction(args[0])) {\n return input.map(v => this.callFunction(args[0] as ReiFunction, [v]));\n }\n return input;\n }\n case 'filter': {\n if (args.length > 0 && this.isFunction(args[0])) {\n return input.filter(v => !!this.callFunction(args[0] as ReiFunction, [v]));\n }\n return input;\n }\n case 'reduce': {\n if (args.length >= 2 && this.isFunction(args[0])) {\n return input.reduce((acc, v) => this.callFunction(args[0] as ReiFunction, [acc, v]), args[1]);\n }\n return input;\n }\n }\n }\n\n // Number pipe commands\n if (typeof input === 'number') {\n switch (cmdName) {\n case 'abs': return Math.abs(input);\n case 'sqrt': return Math.sqrt(input);\n case 'round': return Math.round(input);\n case 'floor': return Math.floor(input);\n case 'ceil': return Math.ceil(input);\n case 'negate': return -input;\n }\n }\n\n // String pipe commands\n if (typeof input === 'string') {\n switch (cmdName) {\n case 'len': return input.length;\n case 'upper': return input.toUpperCase();\n case 'lower': return input.toLowerCase();\n case 'trim': return input.trim();\n case 'split': return input.split(args[0] as string ?? '') as unknown as ReiValue;\n case 'reverse': return Array.from(input).reverse().join('');\n }\n }\n\n // ⤊ converge / ⤋ diverge\n if (cmdName === '⤊' || cmdName === 'converge') {\n if (this.isMDim(input)) {\n return computeMDim(input as MultiDimNumber);\n }\n return input;\n }\n if (cmdName === '⤋' || cmdName === 'diverge') {\n if (typeof input === 'number') {\n return { reiType: 'MDim', center: input, neighbors: [input, input, input, input], mode: 'weighted' as ComputationMode } as MultiDimNumber;\n }\n return input;\n }\n\n // Try as function call\n if (this.env.has(cmdName)) {\n const fn = this.env.get(cmdName);\n if (this.isFunction(fn)) {\n return this.callFunction(fn as ReiFunction, [input, ...args]);\n }\n }\n\n throw new Error(`未知のパイプコマンド: ${cmdName}`);\n }\n\n private evalFnCall(ast: ASTNode): ReiValue {\n const callee = this.eval(ast.callee);\n const args = ast.args.map((a: ASTNode) => this.eval(a));\n\n // genesis()\n if (ast.callee.type === 'Ident' && ast.callee.name === 'genesis') {\n return createGenesis();\n }\n\n // Built-in functions\n if (this.isFunction(callee)) {\n const fn = callee as ReiFunction;\n return this.callFunction(fn, args);\n }\n\n throw new Error(`呼び出し不可能: ${JSON.stringify(callee)}`);\n }\n\n private callFunction(fn: ReiFunction, args: ReiValue[]): ReiValue {\n // Built-in math functions\n if (fn.body === null || fn.body === undefined) {\n return this.callBuiltin(fn.name, args);\n }\n\n const callEnv = new Environment(fn.closure);\n for (let i = 0; i < fn.params.length; i++) {\n callEnv.define(fn.params[i], args[i] ?? null);\n }\n const savedEnv = this.env;\n this.env = callEnv;\n const result = this.eval(fn.body);\n this.env = savedEnv;\n return result;\n }\n\n private callBuiltin(name: string, args: ReiValue[]): ReiValue {\n if (name === 'genesis') return createGenesis();\n\n const a = args[0] !== undefined ? this.toNumber(args[0]) : 0;\n const b = args[1] !== undefined ? this.toNumber(args[1]) : 0;\n switch (name) {\n case 'abs': return Math.abs(a);\n case 'sqrt': return Math.sqrt(a);\n case 'sin': return Math.sin(a);\n case 'cos': return Math.cos(a);\n case 'log': return Math.log(a);\n case 'exp': return Math.exp(a);\n case 'floor': return Math.floor(a);\n case 'ceil': return Math.ceil(a);\n case 'round': return Math.round(a);\n case 'min': return Math.min(a, b);\n case 'max': return Math.max(a, b);\n case 'len':\n if (Array.isArray(args[0])) return (args[0] as any[]).length;\n if (typeof args[0] === 'string') return args[0].length;\n return 0;\n case 'print':\n // In REPL mode this prints, in eval mode returns the value\n return args[0] ?? null;\n default:\n throw new Error(`未知の組込み関数: ${name}`);\n }\n }\n\n private evalMemberAccess(ast: ASTNode): ReiValue {\n const obj = this.eval(ast.object);\n\n if (this.isMDim(obj)) {\n const md = obj as MultiDimNumber;\n switch (ast.member) {\n case 'center': return md.center;\n case 'neighbors': return md.neighbors;\n case 'mode': return md.mode;\n case 'dim': return md.neighbors.length;\n }\n }\n\n if (this.isExt(obj)) {\n const ext = obj as ReiExtended;\n switch (ast.member) {\n case 'order': return ext.order;\n case 'base': return ext.base;\n case 'subscripts': return ext.subscripts;\n case 'valStar': return ext.valStar();\n }\n }\n\n if (this.isGenesis(obj)) {\n const g = obj as GenesisState;\n switch (ast.member) {\n case 'state':\n case 'phase': return g.state;\n case 'omega': return g.omega;\n case 'history': return g.history as unknown as ReiValue;\n }\n }\n\n if (Array.isArray(obj)) {\n switch (ast.member) {\n case 'length': return obj.length;\n case 'first': return obj[0] ?? null;\n case 'last': return obj[obj.length - 1] ?? null;\n }\n }\n\n throw new Error(`メンバー ${ast.member} にアクセスできません`);\n }\n\n private evalIndexAccess(ast: ASTNode): ReiValue {\n const obj = this.eval(ast.object);\n const idx = this.toNumber(this.eval(ast.index));\n if (Array.isArray(obj)) return obj[idx] ?? null;\n if (typeof obj === 'string') return obj[idx] ?? null;\n if (this.isMDim(obj)) return (obj as MultiDimNumber).neighbors[idx] ?? null;\n throw new Error('インデックスアクセス不可');\n }\n\n private evalExtend(ast: ASTNode): ReiValue {\n const target = this.eval(ast.target);\n if (this.isExt(target)) {\n const ext = target as ReiExtended;\n if (ast.subscript) {\n return createExtended(ext.base, ext.subscripts + ast.subscript);\n }\n return createExtended(ext.base, ext.subscripts + 'o');\n }\n throw new Error('拡張は拡張数にのみ適用可能');\n }\n\n private evalReduce(ast: ASTNode): ReiValue {\n const target = this.eval(ast.target);\n if (this.isExt(target)) {\n const ext = target as ReiExtended;\n if (ext.order <= 1) return ext.base;\n return createExtended(ext.base, ext.subscripts.slice(0, -1));\n }\n throw new Error('縮約は拡張数にのみ適用可能');\n }\n\n private evalConverge(ast: ASTNode): ReiValue {\n const left = this.eval(ast.left);\n const right = this.eval(ast.right);\n // Converge: merge two MDim numbers\n if (this.isMDim(left) && this.isMDim(right)) {\n const lm = left as MultiDimNumber;\n const rm = right as MultiDimNumber;\n return {\n reiType: 'MDim',\n center: (lm.center + rm.center) / 2,\n neighbors: [...lm.neighbors, ...rm.neighbors],\n mode: lm.mode,\n } as MultiDimNumber;\n }\n return this.toNumber(left) + this.toNumber(right);\n }\n\n private evalDiverge(ast: ASTNode): ReiValue {\n const left = this.eval(ast.left);\n const right = this.eval(ast.right);\n if (this.isMDim(left)) {\n const md = left as MultiDimNumber;\n const n = this.toNumber(right);\n const half = Math.floor(md.neighbors.length / 2);\n return [\n { reiType: 'MDim', center: md.center, neighbors: md.neighbors.slice(0, half), mode: md.mode },\n { reiType: 'MDim', center: md.center, neighbors: md.neighbors.slice(half), mode: md.mode },\n ] as unknown as ReiValue;\n }\n return this.toNumber(left) - this.toNumber(right);\n }\n\n private evalReflect(ast: ASTNode): ReiValue {\n const left = this.eval(ast.left);\n const right = this.eval(ast.right);\n if (this.isMDim(left)) {\n const md = left as MultiDimNumber;\n return {\n reiType: 'MDim',\n center: md.center,\n neighbors: [...md.neighbors].reverse(),\n mode: md.mode,\n } as MultiDimNumber;\n }\n return this.toNumber(left);\n }\n\n private evalIfExpr(ast: ASTNode): ReiValue {\n const cond = this.eval(ast.cond);\n return this.isTruthy(cond) ? this.eval(ast.then) : this.eval(ast.else);\n }\n\n private evalMatchExpr(ast: ASTNode): ReiValue {\n const target = this.eval(ast.target);\n for (const { pattern, body } of ast.cases) {\n const patVal = this.eval(pattern);\n if (this.matches(target, patVal)) {\n return this.eval(body);\n }\n }\n throw new Error('マッチする分岐が見つかりません');\n }\n\n // --- Helpers ---\n toNumber(val: ReiValue): number {\n if (typeof val === 'number') return val;\n if (typeof val === 'boolean') return val ? 1 : 0;\n if (val === null) return 0;\n if (this.isExt(val)) return (val as ReiExtended).valStar();\n if (this.isMDim(val)) return computeMDim(val as MultiDimNumber);\n if (typeof val === 'string') return parseFloat(val) || 0;\n return 0;\n }\n\n private isTruthy(val: ReiValue): boolean {\n if (val === null || val === false || val === 0) return false;\n if (this.isQuad(val)) return (val as Quad).value === 'top' || (val as Quad).value === 'topPi';\n return true;\n }\n\n private matches(target: ReiValue, pattern: ReiValue): boolean {\n if (typeof target === typeof pattern && target === pattern) return true;\n if (this.isQuad(target) && this.isQuad(pattern)) {\n return (target as Quad).value === (pattern as Quad).value;\n }\n return false;\n }\n\n private isObj(v: ReiValue): boolean {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n }\n private isMDim(v: ReiValue): boolean { return this.isObj(v) && (v as any).reiType === 'MDim'; }\n private isExt(v: ReiValue): boolean { return this.isObj(v) && (v as any).reiType === 'Ext'; }\n private isGenesis(v: ReiValue): boolean { return this.isObj(v) && (v as any).reiType === 'State'; }\n private isFunction(v: ReiValue): boolean { return this.isObj(v) && (v as any).reiType === 'Function'; }\n private isQuad(v: ReiValue): boolean { return this.isObj(v) && (v as any).reiType === 'Quad'; }\n}\n","// ============================================================\n// Rei (0₀式) — D-FUMT Computational Language\n// Main Entry Point\n// Author: Nobuki Fujimoto\n// ============================================================\n\nexport { Lexer, TokenType } from './lang/lexer';\nexport type { Token, TokenTypeValue } from './lang/lexer';\nexport { Parser } from './lang/parser';\nexport { Evaluator } from './lang/evaluator';\nexport {\n Environment,\n type MultiDimNumber,\n type ReiExtended,\n type GenesisState,\n type ReiFunction,\n type ReiValue,\n type ASTNode,\n type NodeType,\n type ComputationMode,\n type CompressMode,\n type Quad,\n type QuadValue,\n type PhaseTag,\n type Temporal,\n type Timeless,\n} from './core/types';\n\nimport { Lexer } from './lang/lexer';\nimport { Parser } from './lang/parser';\nimport { Evaluator } from './lang/evaluator';\nimport type { ReiValue } from './core/types';\n\n/**\n * Shared evaluator instance for the `rei()` convenience function.\n * State persists across calls (variables, functions).\n * Call `rei.reset()` to clear state.\n */\nlet _evaluator = new Evaluator();\n\n/**\n * Evaluate a string of Rei code.\n *\n * @example\n * ```ts\n * import { rei } from 'rei-lang';\n *\n * rei('let x = 𝕄{5; 1, 2, 3, 4}');\n * const result = rei('x |> compute :weighted');\n * console.log(result); // 7.5\n * ```\n */\nexport function rei(code: string): ReiValue {\n const lexer = new Lexer(code);\n const tokens = lexer.tokenize();\n const parser = new Parser(tokens);\n const ast = parser.parseProgram();\n return _evaluator.eval(ast);\n}\n\n/** Reset the shared evaluator state (clear all variables and functions). */\nrei.reset = function reset(): void {\n _evaluator = new Evaluator();\n};\n\n/** Get the shared evaluator instance. */\nrei.evaluator = function evaluator(): Evaluator {\n return _evaluator;\n};\n\n/**\n * Parse Rei code and return the AST without evaluating.\n */\nrei.parse = function parse(code: string) {\n const lexer = new Lexer(code);\n const tokens = lexer.tokenize();\n const parser = new Parser(tokens);\n return parser.parseProgram();\n};\n\n/**\n * Tokenize Rei code and return the token stream.\n */\nrei.tokenize = function tokenize(code: string) {\n const lexer = new Lexer(code);\n return lexer.tokenize();\n};\n\nexport default rei;\n"]}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "rei-lang",
3
+ "version": "0.2.0",
4
+ "description": "Rei (0₀式 / れいしき) — A mathematical computation language based on D-FUMT. Center-periphery patterns as language primitives achieve 74% average code reduction.",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "bin": {
16
+ "rei": "./bin/rei.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "bin",
21
+ "spec",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsup",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "lint": "tsc --noEmit",
30
+ "prepublishOnly": "npm run lint && npm run test && npm run build",
31
+ "repl": "node bin/rei.js"
32
+ },
33
+ "keywords": [
34
+ "rei",
35
+ "0₀式",
36
+ "れいしき",
37
+ "d-fumt",
38
+ "multi-dimensional-numbers",
39
+ "mathematical-computation",
40
+ "programming-language",
41
+ "zero-extension",
42
+ "center-periphery",
43
+ "compress",
44
+ "nobuki-fujimoto"
45
+ ],
46
+ "author": {
47
+ "name": "Nobuki Fujimoto"
48
+ },
49
+ "license": "MIT",
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "https://github.com/nobuki-fujimoto/rei-lang"
53
+ },
54
+ "homepage": "https://github.com/nobuki-fujimoto/rei-lang#readme",
55
+ "bugs": {
56
+ "url": "https://github.com/nobuki-fujimoto/rei-lang/issues"
57
+ },
58
+ "devDependencies": {
59
+ "tsup": "^8.0.0",
60
+ "typescript": "^5.7.0",
61
+ "vitest": "^3.0.0"
62
+ },
63
+ "engines": {
64
+ "node": ">=18.0.0"
65
+ }
66
+ }