لغة تشبه lisp ل PHP.
هذا هو نموذج Hello World Code منه.
رمز PHP:
<?php
require_once " vendor/autoload.php " ;
$ pisp = new Pisp Pisp ;
$ code = file_get_contents ( " code.pisp " );
$ pisp -> define ( " print " , function ( $ args , $ vm ) {
foreach ( $ args as $ v ) {
if ( is_string ( $ v ) || method_exists ( $ v , " __toString " )) {
echo $ v ;
} else {
var_dump ( $ v );
}
}
});
$ pisp -> execute ( $ code );محتوى Code.pisp:
( print " Hello World " " n " )نتيجة:
Hello World
composer require xtlsoft/pispلقد بنينا واجهة لك. يمكنك استخدامه بسهولة.
<?php
$ pisp = new Pisp Pisp (); إلى اليمين ، فئة PispPisp هي الواجهة.
يمتد فئة PispVMVM ولديها طريقة execute لتنفيذ التعليمات البرمجية مباشرة.
على سبيل المثال:
<?php
$ code = ' (print ["Hello World"] ["n"]) ' ;
$ pisp -> execute ( $ code );هذا هو فئة VM الرئيسية.
لدينا طريقة تعريف وحذف تستخدم لتحديد وظائف وحذفها.
نعم! المتغيرات هي أيضا وظائف في PISP لأنها وظيفية بحتة.
<?php
$ vm = new Pisp Pisp ; // Also can be $vm = new PispVMVM;
$ vm -> define ( " abc " , 123 );
$ vm -> define ( " + " , function ( $ args , $ vm ) {
return $ args [ 0 ] + $ args [ 1 ];
});
$ vm -> delete ( " abc " );
echo $ vm -> execute ( " (+ 1 2) " ); // 3هل لاحظت؟ عند تحديد وظيفة ، يجب أن يكون رد اتصال صالح مع 2 معلمات. الأول هو صفيف الحجج الحقيقية ، والثاني هو مثيل فئة pisp vm vm.
يمكنك إضافة وظائف ديناميكية.
هذا هو لتحليل رمز.
<?php
$ parser = new Pisp Parser Parser ;
$ rslt = $ parser -> parse ( ' (print ["Hello Worldn"]) ' );
var_export ( $ rslt instanceof Pisp Parser AST Root); // true هذا هو المشي في AST.
<?php
$ walker = new Pisp Parser ASTWalker ( $ rslt );
$ walker -> walk ( function ( Pisp Parser AST Node $ node ) {
echo $ node -> name , PHP_EOL ;
}); تبدأ استدعاء الوظيفة بـ ( وينتهي بـ A ) . يتم فصل اسم الوظيفة والوسائط بأي شخصيات فارغة.
الحجج اختيارية.
على سبيل المثال:
( + 1 2 )
( +
1
2
)
( + 1 2 )
(a_function_call_without_arguments) الحرفية ليست محاطة [ و ] الآن.
على سبيل المثال:
( + 1 2 )
( print " a string " )
( + 1.2 1.4 )علاوة على ذلك ، يدعم PISP المكالمات البطيئة.
فقط أضف @ قبل اسم الوظيفة وستكون الوسائط هي ASTS الخاصة بهم.
(@print (undefined_function)) سيؤدي ذلك إلى إخراج نتيجة var_dump لفئة PispParserASTCallingNode .
لا يتضمن PISP أي وظائف افتراضيًا. هذا يعني ، إذا قمت بتشغيل الأمثلة أعلاه ، فستحصل على NoFunctionException . يجب أن تحددها بنفسك.
ومع ذلك ، هناك stdlib مفيد ، فقط:
Pisp StdLib StandardLibrary:: register ( $ vm ); PISP يدعم فقط التعليقات كتلة بدءا من #| وتنتهي مع |# .
#| This is the function comment |#
(do_something (some_function) [ " literal " ]) #| ok too |#PISP يدعم التعليقات المتداخلة.
مثال:
#| comment some code
(print "Hello World") #| This prints "Hello World" |#
|#يمكنك أيضًا استخدام خدعة صغيرة للسماح لها بدعمها:
<?php
$ pisp = new Pisp Pisp ;
$ pisp -> define ( " rem " , function ( $ args , $ vm ) {
return ;
});ثم ، يمكنك فقط استخدام:
(@rem " This is a comment " )وهذا لن يتم تنفيذه.
PISP الآن يدعم العديد من الحرفيين.
الحرفية ليست محاطة [ و ] الآن.
يوجد حاليًا ثلاثة أنواع من الحرفيين: الرقم والسلسلة والقائمة.
الرقم هو عدد صحيح أو تعويم.
مثال:
( print 123 123.456 1e10 0x3f3f3f3f)الأوتار محاطة باقتباسات. يدعم Muiltiple ونقلت.
n أو أشياء أخرى غير مدعومة بالكامل في الوقت الحالي.
مثال:
( print " Hello World " ' Another 'test' Hello World')القائمة هي مجموعة من القيم.
إنه محاط بـ [ و ] ، يتم فصل كل قيمة بـ A , .
مثال:
( print [1, 2, [3, 4]] [ " Hello " , 234, " World " , ' you'])