earl-lang
Version:
Earl Bahasa Pemrograman Alur Kerja
94 lines (77 loc) • 3.21 kB
JavaScript
// modules/masukkan.js
const { memory } = require('../memory.js');
const readline = require('readline');
const { resolveToken } = require('./tampilkan');
function masukkan(tokens) {
return new Promise((resolve) => {
const varName = tokens[1].replace(/:/g, '');
if (
tokens[1].startsWith(':') &&
tokens[1].endsWith(':') &&
tokens[2] === 'sebagai'
) {
const namaKelas = varName;
const namaInstance = tokens[3];
if (!memory[namaKelas]) {
console.error(`Kelas ${namaKelas} belum didefinisikan.`);
return resolve();
}
if (memory[namaKelas].__tipe !== 'kelas') {
console.error(`'${namaKelas}' bukan kelas.`);
return resolve();
}
const instance = {};
for (const attr of memory[namaKelas].atribut || []) {
instance[attr] = null;
}
memory[namaInstance] = {
__tipe: namaKelas,
...instance,
};
console.log(`Instance ${namaInstance} dari kelas ${namaKelas} dibuat.`);
return resolve();
}
if (tokens[1].startsWith(':') && tokens[1].endsWith(':')) {
if (memory[varName]) {
console.error(`Variabel ${varName} sudah didefinisikan.`);
return resolve();
}
let prompt = 'Masukkan nilai untuk ' + tokens[1] + ': ';
const sisa = tokens.slice(2).join(' ').trim();
const quoted = sisa.match(/^"(.*)"$/);
if (quoted) {
prompt = quoted[1] + ' ';
}
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.question(prompt, (penggunaMasukkan) => {
let nilai = penggunaMasukkan;
if (penggunaMasukkan.startsWith(':') && penggunaMasukkan.endsWith(':')) {
nilai = resolveToken(penggunaMasukkan, {}, {});
}
if (!isNaN(nilai)) {
nilai = Number(nilai);
memory[varName] = nilai;
console.log(`${varName} disimpan sebagai angka.`);
} else if (typeof nilai === 'string') {
const cukupSingkat = nilai.length <= 10;
const cocokDenganPola = /^[a-zA-Z\s]+$/.test(nilai);
if (cukupSingkat && cocokDenganPola) {
memory[varName] = nilai;
console.log(`${varName} disimpan sebagai teks valid.`);
} else {
console.error(`Input untuk ${varName} tidak valid.`);
}
} else {
memory[varName] = nilai;
console.log(`${varName} disimpan.`);
}
rl.close();
resolve();
});
}
});
}
module.exports = { masukkan };