UNPKG

aklang

Version:

A Toy Programming Language by AK

61 lines (51 loc) 2.09 kB
import { Tokenizer } from '../../../Parser/tokenizer/tokenizer.js' // adjust if needed import { Parser } from '../../../Parser/parser/parser.js' // adjust if needed import { Interpreter } from '../../../interpreter/interpreter.js' import { SPEC } from '../../../constants/specs.js' // assuming SPEC is defined somewhere // import { Tokenizer } from '../aklang/interpreter/Tokenizer' // import { Parser } from '../aklang/interpreter/Parser' // import { Interpreter } from '../aklang/interpreter/Interpreter' // import { SPEC } from '../aklang/interpreter/spec' // or wherever your SPEC is export const executeCode = (code, setOutput) => { // Save original console methods const originalLog = console.log const originalError = console.error const originalWarn = console.warn const originalInfo = console.info try { // Override console methods to capture output into UI console.log = (...args) => { setOutput(prev => [...prev, args.join(' ')]) originalLog(...args) } console.error = (...args) => { setOutput(prev => [...prev, `Error: ${args.join(' ')}`]) originalError(...args) } console.warn = (...args) => { setOutput(prev => [...prev, `Warning: ${args.join(' ')}`]) originalWarn(...args) } console.info = (...args) => { setOutput(prev => [...prev, `Info: ${args.join(' ')}`]) originalInfo(...args) } // ✅ Run your Aklang pipeline (no need to change your Interpreter) const tokenizer = new Tokenizer(SPEC) tokenizer.initTokenizer(code) const parser = new Parser(tokenizer) parser.init() const ast = parser.parseProgram() const interpreter = new Interpreter(ast) interpreter.interpret(ast) } catch (error) { if(error.message === "process is not defined") return; setOutput(prev => [...prev, `AKLang Error: ${error.message}`]) } finally { // Restore original console methods console.log = originalLog console.error = originalError console.warn = originalWarn console.info = originalInfo } }