From deb3a463589d9faea917bd6fe990eb9321e89577 Mon Sep 17 00:00:00 2001 From: Ikrum Hossain Date: Sat, 17 Sep 2016 12:42:40 +0600 Subject: [PATCH] index with zero --- docs/loop.md | 14 ++++++++------ lib/parser.js | 25 ++++++++++++++++++++----- 2 files changed, 28 insertions(+), 11 deletions(-) mode change 100644 => 100755 lib/parser.js diff --git a/docs/loop.md b/docs/loop.md index 826f009..9fd7ba9 100755 --- a/docs/loop.md +++ b/docs/loop.md @@ -39,10 +39,10 @@ ## লুপ এর ইন্ডেক্স প্রোগ্রামিং এ ইন্ডেক্স বলতে পজিশন বা লোকেশনকে নির্দেশ করে। লুপ এ ইন্ডেক্স বলতে বুঝি যে এই মূহূর্তে কোড ব্লক টি কততম বার এক্সিকিউট হতে যাচ্ছে। পতাকায় লুপ ব্লকের মাঝে _ইন্ডেক্স নামে একটি রিড-অনলি ভ্যারিয়েবল আছে যা লুপের বর্তমান পজিশন নির্দেশ করে। -নোট: _ইন্ডেক্স এর মান ১ থেকে শুরু হয় +নোট: _ইন্ডেক্স এর মান ০ থেকে শুরু হয় ``` -// ১ থেকে ১০ পর্যন্ত প্রিন্ট করার প্রোগ্রাম +// ০ থেকে ৯ পর্যন্ত প্রিন্ট করার প্রোগ্রাম লুপ(১০ বার){ দেখাও(_ইন্ডেক্স); } @@ -61,7 +61,7 @@ ``` // ইনফিনিট লুপ লুপ(){ - ধরি বয়স = _ইন্ডেক্স ; + ধরি বয়স = _ইন্ডেক্স + ১; যদি(বয়স ৮০ হয়){ দেখাও("এ দুনিয়া থেকে বিদায় নিলাম"); থামো ; // লুপ বন্ধ করা @@ -78,7 +78,7 @@ */ ``` -## কন্টিনিউ স্টেটমেন্ট +## কন্টিনিউ স্টেটমেন্ট কন্টিনিউ স্টেটমেন্ট অনেকটা ব্রেক স্টেটমেন্ট এর মত । তবে এটি লুপ থামিয়ে দেয় না বরং একটি লুপকে পরবর্তী কোড রান করতে বাধা দেয় এবং পরবর্তী লুপ রান করে। সহজভাবে বলতে গেলে এটি অনেকটা SKIP বাটনের মত কাজ করে। কন্টিনিউ স্ট্যাটমেন্ট এ "চলবে" কিওয়্যার্ডটি ব্যবহার করা হবে। তবে পতাকার স্ট্যাবল রিলিজে এই কিওয়্যার্ডটি পরিবর্তন হতে পারে। ``` @@ -86,10 +86,12 @@ যদি(_ইন্ডেক্স % ২ == ০ ){ চলবে; // পরবর্তী লাইন গুলো রান হবে না, আরেকটি লুপ শুরু হবে। } - দেখাও(_ইন্ডেক্স); + দেখাও(_ইন্ডেক্স + ১); } -// আউটপুট: ১ থেকে ১০ পর্যন্ত বিজোড় নাম্বার গুলো প্রিন্ট হবে। +// আউটপুট: ২,৪,৬,৮,১০ +// ১ থেকে ১০ পর্যন্ত জোড় সংখ্যা গুলো প্রিন্ট হবে। + ``` ## রেগুলার লুপ diff --git a/lib/parser.js b/lib/parser.js old mode 100644 new mode 100755 index b433bfb..87998e9 --- a/lib/parser.js +++ b/lib/parser.js @@ -11387,6 +11387,15 @@ var Potaka = (function() { return "ReservedWordError: '"+word+ "' একটি রিজার্ভ ওয়ার্ড " + "যাহা ভ্যারিয়েবল বা ফাংশনের নাম হিসিবে ব্যবহার করা যাবে না ।"; } + function isSafari(){ // detect safari browser + if(!navigator) return false; + if(typeof navigator.userAgent != "string") return false; + + return navigator.userAgent.indexOf("Safari") > -1 + && navigator.userAgent.indexOf("Chrome") == -1 + && navigator.userAgent.indexOf("Firefox") == -1; + } + function isValidIdentifier(declarations){ var keys = Object.keys(declarations); for(var key of keys){ @@ -11436,6 +11445,11 @@ var Potaka = (function() { /* Custom AST for loop(n times) */ function nTimesForLoop(n){ + if(isSafari()) + var kind = "var"; // safari doesn't support let keyword + else + var kind = "let"; + return { "init": { "type": "VariableDeclaration", @@ -11448,11 +11462,11 @@ var Potaka = (function() { }, "init": { "type": "Literal", - "value": 1 + "value": 0 } } ], - "kind": "let" + "kind": kind }, "test": { "type": "BinaryExpression", @@ -11523,11 +11537,12 @@ var Potaka = (function() { // handle (string + 45) -> (string + "৪৫") if(element[1] === "+"){ if(result.type === "Literal" && element[3].type === "Literal" ){ - if(typeof result.value === "string") + if((typeof result.value === "string" && typeof element[3].value === "number") || + (typeof element[3].value === "string" && typeof result.value === "number")) + { result.value = enToBnNumber(result.value).toString(); - - if(typeof element[3].value === "string") element[3].value = enToBnNumber(element[3].value).toString(); + } } } return {