اکستنشن کردن string, array, object, regex
برای توسعه بهتر کلاس های پایه ای رو باید به صورت اکستنشن در بیارم.
regex رو هم با pcre2 نوشتم، فقط باید به صورت extension اون رو پیاده سازی کنم.
برای توسعه بهتر کلاس های پایه ای رو باید به صورت اکستنشن در بیارم.
regex رو هم با pcre2 نوشتم، فقط باید به صورت extension اون رو پیاده سازی کنم.
خب ternary رو هم اوکی کردم. البته یکم دیگه کار داره که اون رو هم به زودی تکمیل میکنم. shift left و shift right رو هم اوکی کردم.
چیزی تا بستن پروژه برای x86 باقی نمونده.
main() {
let a;
a = 20;
let b;
b = a < 30 ? 5 : 3;
print(b);
}
syntax مربوط به regex رو شبیه به js اضافه کردم و کلاسش رو هم اینطرف تعریف کردم و در c اون رو صدا زدم. اگر کلاسی اینطرف تعریف بشه در c هم میتونم اون رو صدا بزنم ...
import lib.regexp
main() {
print( /\w+\s/g );
}
کارهای پیش رو که باید انجام بدم
base64, encryption, big num, float, double, hex, regex
با انجام این کارها زبان تکمیل میشه ...
خب تا اینجای کار تونستم یک پردازش خیلی ساده انجام بدم :
class jsonParser {
construct( a ) {
this.str = a;
this.i = 0;
this.res = this.parse();
}
next() {
this.i++;
while( this.tok() == ' ' ) {
this.i++;
}
}
tok() {
return this.str[ this.i ];
}
parseObject() {
this.next();
let ret = [];
while( this.tok() != '}' ) {
let k = this.parse();
this.next();
let v = this.parse();
ret[k] = v;
if( this.tok() == ',' ) {
this.next();
}
}
this.next();
return ret;
}
parseStr() {
let a = "";
this.next();
while( this.tok() != '"' ) {
a = a + this.tok();
this.next();
}
this.next();
return a;
}
parseArray() {
this.next();
let ret = [];
let i = 0;
while( this.tok() != ']' ) {
let k = i++;
let v = this.parse();
ret[k] = v;
if( this.tok() == ',' ) {
this.next();
}
}
this.next();
return ret;
}
init() {
}
parse() {
let a = this.tok();
if( a == "{" ) {
return this.parseObject();
} else if( a == '"' ) {
return this.parseStr();
} else if( a == '[' ) {
return this.parseArray();
}
}
}
main() {
let a = new jsonParser('{ "test" : "123" , "test1" : "321", "array" : [ "a", "b", "c", "d" ], "inner" : {"aa" : "11", "bb" : "22", "cc" : "33"} }');
print( a.res );
print( a.res.test );
}
ادامه کار هم بعد از بازگشت از کاشان ...
قرار بود که یک http server بنویسم و زبان رو دیباگ کنم. به این نتیجه رسیدم که یک json parser بنویسم و زبان رو دیباگ کنم. تا الان خیلی از مشکلاتش رو برطرف کردم و با پایان json parser خیلی از قسمت ها دیباگ میشه.
بعد از اون هم به سراغ نوشتن http server میرم.
بعد از اون به سراغ اعداد float میرم.
پیاده سازی کلاس در زبان c رو هم انجام دادم که روال اون رو راحتتر میکنم.
یه سری قسمت ها رو خیلی بد پیاده سازی کردم که باید حتما اصلاح کنم.
مثلا وقتی یک متغییر میخواد روش عملیاتی انجام بشه. اون متغییر میتونه هر چیزی باشه و فقط بار اول هست که باید مقدار اون رو بگیرم. در دفعات بعد نیازی به گرفتن مقدار اون نیست و مثلا پلاس پلاس کردن و ... رو باید بدون توجه به اینکه چی رو میخام پلاس پلاس کنم انجام بدم ...
خب یک تغییر اساسی در کلاس ها انجام دادم. از این به بعد متد ها به پراپرتی prototype به آبجکت اصلی کلاس اضافه میشن. و خواندن اون هم از prototype انجام میشه. مزیت اینکار استفاده کمتر از رم میشه که با ایجاد هر آبجکت جدید از کلاس ( new کردن کلاس ) دیگه کپی انجام نمیشه و رفرنس میشه به کلاس اصلی و با اضافه شدن متد به کلاس اصلی به تمامی آبجکت هایی که حتی از قبل هم ایجاد شدن اون متد اضافه میشه.
مثال :
class Test {
a() {
print("in a\n")
}
}
main() {
let y = {}
y.o = func() {
print("y o \n")
}
y.o();
print( String )
print( Array )
print( Object )
String.prototype.test = func() {
return 2;
}
String.prototype.test1 = func() {
return "test1";
}
let a = "Hello World"
print( a.substr(1,4)+"\n" )
print( a.length() )
print("\n")
print( a.test() )
print("\n")
print( a.test1() )
print("\n")
let g = new Test
Test.prototype.b = func() {
print("in b\n");
}
print( g );
g.a();
g.b();
}
تا قبل از اینجا توابع داخل sym_stk نگه داری میشدن ولی از این به بعد تصمیم دارم که همه چیز داخل var_stk نگه داری بشن. الان دیگه نمیشه کلاس و تابع هم نام داشت. ( قبلا میشد )
یکی از قسمت های خوب زبان php باز و بسته شدن تگ هست. اما ایرادهایی مثل تعریف متغییر با $ sign و یا -> به جای . در زبان php و یا . به جای + برای concat string هست که به نظرم js syntax خیلی بهتر از اون هست.
شاید dolant تلفیقی ازا ین دو زبان بشه.
این رو به عنوان یک ایده بیان کردم