UNPKG

earl-lang

Version:

Earl Bahasa Pemrograman Alur Kerja

138 lines (115 loc) 4.35 kB
// modules/daftar.js const { memory } = require('../memory.js'); const { resolveToken } = require('./tampilkan'); async function daftar(tokens, modules, context) { const cmd = tokens[1]; const resolveValue = (val) => { if (/^".*"$/.test(val)) { return val.slice(1, -1); } else if (!isNaN(val)) { return Number(val); } else if (val.startsWith(':') && val.endsWith(':')) { return resolveToken(val); } return val; }; if (cmd === 'buat') { const varName = tokens[2].slice(1, -1); memory[varName] = []; return; } if (cmd === 'panjang') { const varName = tokens[2].slice(1, -1); if (!Array.isArray(memory[varName])) { console.error(`'${varName}' bukan daftar.`); return; } console.log(memory[varName].length); return; } if (cmd === 'tambah') { const varName = tokens[2].slice(1, -1); if (!Array.isArray(memory[varName])) { console.error(`'${varName}' bukan daftar.`); return; } let val = tokens.slice(3).join(' ').trim(); val = resolveValue(val); memory[varName].push(val); return; } if (cmd === 'hapuspop') { const varName = tokens[2].slice(1, -1); if (!Array.isArray(memory[varName])) { console.error(`'${varName}' bukan daftar.`); return; } memory[varName].pop(); console.log(`Elemen terakhir dari '${varName}' dihapus.`); return; } if (cmd === 'gabung') { const namaA = tokens[2].slice(1, -1); const namaB = tokens[3].slice(1, -1); const namaHasil = tokens[4].slice(1, -1); if (!Array.isArray(memory[namaA]) || !Array.isArray(memory[namaB])) { console.error("Semua operand gabung harus berupa daftar."); return; } memory[namaHasil] = [...memory[namaA], ...memory[namaB]]; console.log(`Daftar '${namaHasil}' diatur ke hasil gabungan.`); return; } if (cmd === 'ambil') { const varName = tokens[2].slice(1, -1); const indexes = tokens.slice(3).map(Number); let current = memory[varName]; for (const idx of indexes) { if (!Array.isArray(current)) { console.error(`Daftar bersarang tidak valid di '${varName}' pada index ${idx}.`); return; } if (isNaN(idx) || idx < 0 || idx >= current.length) { console.error(`Index '${idx}' tidak valid untuk daftar '${varName}'.`); return; } current = current[idx]; } console.log(current); return; } if (cmd === 'sisip') { const varName = tokens[2].slice(1, -1); const index = Number(tokens[3]); let val = tokens.slice(4).join(' ').trim(); if (!Array.isArray(memory[varName])) { console.error(`'${varName}' bukan daftar.`); return; } if (isNaN(index) || index < 0 || index > memory[varName].length) { console.error(`Index '${index}' tidak valid untuk daftar '${varName}'.`); return; } val = resolveValue(val); memory[varName].splice(index, 0, val); console.log(`Nilai disisipkan ke index ${index} dalam daftar '${varName}'.`); return; } if (cmd === 'hapus' && tokens.length === 4) { const varName = tokens[2].slice(1, -1); const index = Number(tokens[3]); if (!Array.isArray(memory[varName])) { console.error(`'${varName}' bukan daftar.`); return; } if (isNaN(index) || index < 0 || index >= memory[varName].length) { console.error(`Index '${index}' tidak valid untuk daftar '${varName}'.`); return; } const removed = memory[varName].splice(index, 1); console.log(`Elemen '${removed[0]}' di index ${index} telah dihapus dari '${varName}'.`); return; } console.error(`Perintah daftar '${cmd}' tidak dikenali.`); } module.exports = { daftar };