mystic-yard 2.0.3 → 2.0.5
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.
- package/compiler/parser.js +17 -20
- package/compiler/scanner.js +2 -5
- package/compiler/writer.js +16 -7
- package/compiler.js +52 -21
- package/package.json +1 -1
package/compiler/parser.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (rule) {
|
|
12
|
-
output += rule.to;
|
|
1
|
+
module.exports = function(tokens) {
|
|
2
|
+
let jsCode = "";
|
|
3
|
+
|
|
4
|
+
// উদাহরণ: টোকেনাইজড কোড প্রসেস করার লুপ
|
|
5
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
6
|
+
if (tokens[i] === 'print') {
|
|
7
|
+
// print এর পরের টোকেনটিকে console.log এ কনভার্ট করবে
|
|
8
|
+
let value = tokens[i + 1] || '""';
|
|
9
|
+
jsCode += `console.log(${value});\n`;
|
|
10
|
+
i++;
|
|
13
11
|
} else {
|
|
14
|
-
|
|
12
|
+
// অন্য কোনো সাধারণ জাভাস্ক্রিপ্ট কোড থাকলে সরাসরি বসাবে
|
|
13
|
+
if (tokens[i].trim() !== "") {
|
|
14
|
+
jsCode += tokens[i] + " ";
|
|
15
|
+
}
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
output += " ";
|
|
18
17
|
}
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
module.exports = parser;
|
|
18
|
+
|
|
19
|
+
return jsCode.trim();
|
|
20
|
+
};
|
package/compiler/scanner.js
CHANGED
|
@@ -2,18 +2,17 @@ const fs = require('fs');
|
|
|
2
2
|
const path = require('path');
|
|
3
3
|
|
|
4
4
|
function scanDir(dirPath, fileList = []) {
|
|
5
|
-
// ডিরেক্টরির সব ফাইল ও ফোল্ডারের লিস্ট নেওয়া
|
|
6
5
|
const files = fs.readdirSync(dirPath);
|
|
7
6
|
|
|
8
7
|
files.forEach(file => {
|
|
9
8
|
const filePath = path.join(dirPath, file);
|
|
10
9
|
const stat = fs.statSync(filePath);
|
|
11
10
|
|
|
12
|
-
// node_modules এবং dist ফোল্ডার বাদ দিয়ে বাকি সব
|
|
11
|
+
// node_modules এবং dist ফোল্ডার বাদ দিয়ে বাকি সব ফোল্ডারে খুঁজবে
|
|
13
12
|
if (stat.isDirectory() && file !== 'node_modules' && file !== 'dist') {
|
|
14
13
|
scanDir(filePath, fileList);
|
|
15
14
|
}
|
|
16
|
-
// যদি ফাইলটির
|
|
15
|
+
// যদি ফাইলটির এক্সテンশন .my হয়, তবে সেটি রিড করবে
|
|
17
16
|
else if (stat.isFile() && path.extname(file) === '.my') {
|
|
18
17
|
fileList.push({
|
|
19
18
|
name: file,
|
|
@@ -25,8 +24,6 @@ function scanDir(dirPath, fileList = []) {
|
|
|
25
24
|
return fileList;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
|
-
// ফ্রেমওয়ার্কের মূল ফাংশন যা ফাইলগুলো রিটার্ন করবে
|
|
29
27
|
module.exports = function() {
|
|
30
|
-
// এটি হার্ডকোডেড পাথ বাদ দিয়ে সরাসরি বর্তমান প্রজেক্টের রুট ডিরেক্টরি স্ক্যান করবে
|
|
31
28
|
return scanDir(process.cwd());
|
|
32
29
|
};
|
package/compiler/writer.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
const fs = require(
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
2
3
|
|
|
3
|
-
function
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
module.exports = function(jsCode, outputPath) {
|
|
5
|
+
try {
|
|
6
|
+
// ফাইলটি যে ডিরেক্টরিতে তৈরি হবে, তা নিশ্চিত করা
|
|
7
|
+
const dir = path.dirname(outputPath);
|
|
8
|
+
if (!fs.existsSync(dir)){
|
|
9
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// জাভাস্ক্রিপ্ট কোডটি ফাইলে লিখে দেওয়া
|
|
13
|
+
fs.writeFileSync(outputPath, jsCode, 'utf8');
|
|
14
|
+
} catch (error) {
|
|
15
|
+
console.error(`❌ ফাইল রাইট করতে সমস্যা হয়েছে (${outputPath}):`, error.message);
|
|
16
|
+
}
|
|
17
|
+
};
|
package/compiler.js
CHANGED
|
@@ -1,33 +1,64 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const { exec } = require('child_process'); // JS ফাইল রান করার জন্য
|
|
3
4
|
|
|
4
|
-
const
|
|
5
|
-
const parser = require("./compiler/parser");
|
|
6
|
-
const writer = require("./compiler/writer");
|
|
5
|
+
const directoryPath = './src'; // আপনার সোর্স ফোল্ডার
|
|
7
6
|
|
|
8
|
-
//
|
|
9
|
-
function
|
|
10
|
-
const
|
|
7
|
+
// JS ফাইল টার্মিনালে রান করার ফাংশন
|
|
8
|
+
function runJsFile(jsFile) {
|
|
9
|
+
const jsFilePath = path.join(directoryPath, jsFile);
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
// টার্মিনালে স্বয়ংক্রিয়ভাবে 'node src/filename.js' কমান্ডটি রান করবে
|
|
12
|
+
exec(`node "${jsFilePath}"`, (error, stdout, stderr) => {
|
|
13
|
+
console.log(`\n--- Output of ${jsFile} ---`);
|
|
14
|
+
|
|
15
|
+
if (error) {
|
|
16
|
+
console.error(`❌ রান করতে এরর হয়েছে: ${error.message}`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (stderr) {
|
|
20
|
+
console.error(`⚠️ স্ট্যানডার্ড এরর: ${stderr}`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// ফাইলের আসল আউটপুট টার্মিনালে প্রিন্ট হবে
|
|
25
|
+
console.log(stdout || '(কোনো আউটপুট নেই)');
|
|
26
|
+
console.log("-".repeat(25));
|
|
27
|
+
});
|
|
28
|
+
}
|
|
13
29
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
30
|
+
// নাম মিলিয়ে অটো-কানেক্ট এবং রান করার মেইন ফাংশন
|
|
31
|
+
function startCompiler() {
|
|
32
|
+
try {
|
|
33
|
+
if (!fs.existsSync(directoryPath)) {
|
|
34
|
+
console.error(`❌ ডিরেক্টরি পাওয়া যায়নি: ${directoryPath}`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
17
37
|
|
|
18
|
-
const
|
|
19
|
-
|
|
38
|
+
const files = fs.readdirSync(directoryPath);
|
|
39
|
+
const myFiles = files.filter(file => file.endsWith('.my'));
|
|
40
|
+
const jsFiles = files.filter(file => file.endsWith('.js'));
|
|
20
41
|
|
|
21
|
-
|
|
22
|
-
console.log("Generated JS:", jsCode);
|
|
42
|
+
console.log("🔍 ফাইল স্ক্যান করা হচ্ছে...");
|
|
23
43
|
|
|
24
|
-
|
|
25
|
-
|
|
44
|
+
myFiles.forEach(myFile => {
|
|
45
|
+
const baseName = path.basename(myFile, '.my');
|
|
46
|
+
const matchingJsFile = `${baseName}.js`;
|
|
26
47
|
|
|
27
|
-
|
|
48
|
+
if (jsFiles.includes(matchingJsFile)) {
|
|
49
|
+
console.log(`🔗 কানেক্টেড: ${myFile} -> ${matchingJsFile}`);
|
|
50
|
+
|
|
51
|
+
// ম্যাচ হওয়া JS ফাইলটিকে রান করা হচ্ছে
|
|
52
|
+
runJsFile(matchingJsFile);
|
|
53
|
+
} else {
|
|
54
|
+
console.warn(`⚠️ সতর্কতা: '${myFile}' এর জন্য কোনো '${baseName}.js' পাওয়া যায়নি।`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error("কম্পাইলার রান করতে সমস্যা হয়েছে:", error);
|
|
60
|
+
}
|
|
28
61
|
}
|
|
29
62
|
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
init: initFramework
|
|
33
|
-
};
|
|
63
|
+
// কম্পাইলার স্টার্ট করুন
|
|
64
|
+
startCompiler();
|