Tokay هي لغة برمجة مصممة للتحليل المخصص.
مهم
توكاي قيد التطوير ولم يتم النظر فيه لاستخدامه في الإنتاج بعد. كن جزءًا من التطوير المستمر لـ Tokay، وساهم!
تهدف Tokay إلى أن تصبح لغة برمجة يمكن استخدامها لتنفيذ الحلول بسرعة لمشاكل معالجة النصوص. يمكن أن يتضمن ذلك إما استخراج بيانات بسيط، ولكن أيضًا تحليل الهياكل النحوية أو أجزاء منها وتحويل المعلومات إلى أشجار تحليل منظمة أو أشجار بناء جملة مجردة لمزيد من المعالجة.
لذلك، لم تصبح توكاي مجرد أداة عملية للجمل البسيطة مثل أدوات المطابقة أو أدوات التعرف، ولكنها أصبحت أيضًا لغة يمكن استخدامها لتنفيذ محللي التعليمات البرمجية، أو أدوات إعادة البناء، أو المترجمين الفوريين، أو المترجمين، أو المترجمين. في الواقع، يتم تطبيق محلل اللغة الخاص بـ Tokay في Tokay نفسها.
توكاي مستوحاة من awk، ولها نكهات نحوية ودلالية من Python وRust، ولكنها تتبع أيضًا فلسفتها وأفكارها ومبادئ التصميم الخاصة بها. وبالتالي، لا يمكن مقارنة Tokay مباشرة باللغات أو المشاريع الأخرى، وهي تقف بمفردها. إنها لغة برمجة جديدة تمامًا.
لا يزال توكاي مشروعًا صغيرًا جدًا ويكتسب الكثير من الإمكانات. المتطوعين هم موضع ترحيب!
باستخدام مدير التبعية Rusts cargo
أداة البناء، ما عليك سوى تثبيت Tokay باستخدام
$ cargo install tokay
بالنسبة للتوزيعات المستندة إلى Arch Linux، توجد أيضًا حزمة tokay
و tokay-git
في Arch Linux AUR.
نسخة توكاي من "Hello World" واضحة تمامًا.
print("Hello World")
$ tokay 'print("Hello World")' Hello World
يمكن لـ Tokay أيضًا الترحيب بأي كلمات يتم تغذيتها بها. يقوم البرنامج التالي بطباعة "Hello Venus" أو "Hello Earth" أو "Hello" متبوعًا بأي اسم آخر تم تحليله مسبقًا بواسطة رمز Word
المدمج. يتم حذف أي إدخال آخر غير الكلمة تلقائيًا.
print("Hello", Word)
$ tokay 'print("Hello", Word)' -- "World 1337 Venus Mars 42 Max" Hello World Hello Venus Hello Mars Hello Max
يمكن تنفيذ برنامج بسيط لحساب الكلمات والأرقام وطباعة المجموع بعد ذلك على النحو التالي:
Word words += 1
Number numbers += 1
end print(words || 0, "words,", numbers || 0, "numbers")
$ tokay 'Word words += 1; Number numbers += 1; end print(words || 0, "words,", numbers || 0, "numbers")' -- "this is just the 1st stage of 42.5 or .1 others" 9 words, 3 numbers
حسب التصميم، يقوم Tokay بإنشاء أشجار بناء الجملة من المعلومات المستهلكة تلقائيًا.
يستخدم البرنامج التالي محللًا ومترجمًا للتعبيرات الرياضية البسيطة، مثل 1 + 2 + 3
أو 7 * (8 + 2) / 5
. تتم طباعة نتيجة كل تعبير بعد ذلك.
تعد معالجة التكرارات اليسرى المباشرة وغير المباشرة دون الانتهاء من الحلقات اللانهائية إحدى ميزات Tokay الأساسية.
_ : Char< t>+ # redefine whitespace to just tab and space
Factor : @{
Int _ # built-in 64-bit signed integer token
'(' _ Expr ')' _
}
Term : @{
Term '*' _ Factor $1 * $4
Term '/' _ Factor $1 / $4
Factor
}
Expr : @{
Expr '+' _ Term $1 + $4
Expr '-' _ Term $1 - $4
Term
}
Expr _ print("= " + $1) # gives some neat result output
$ tokay examples/expr_from_readme.tok 1 + 2 + 3 = 6 7 * (8 + 2) / 5 = 14 7*(3-9) = -42 ...
حساب أرقام فيبوناتشي من الأعداد الصحيحة التي تم تحليلها:
fibonacci : @n {
if n <= 1 n else fibonacci(n - 1) + fibonacci(n - 2)
}
Int print($1, "=>", fibonacci($1))
$ tokay examples/fibonacci2.tok 0 0 => 0 1 1 => 1 2 2 => 1 3 3 => 2 4 4 => 3 5 5 => 5 6 6 => 8 7 7 => 13 8 8 => 21 9 9 => 34 10 10 => 55
توفر صفحة Tokay الرئيسية tokay.dev روابط لبداية سريعة ووثائق. يتم الاحتفاظ بالكود المصدري للوثائق في مستودع منفصل.
لتصحيح الأخطاء، هناك طريقتان للاستخدام.
log
بالنسبة لتتبع Rust القياسي، استخدم مرافق env_logger
. يتم تجميع التتبع الكامل فقط في ملفات تصحيح الأخطاء التنفيذية، ولا يوفر إصدار الإصدار سوى مستوى تحذير وما فوق.
$ RUST_LOG=tokay=debug tokay
وبدلاً من ذلك، يمكن تفعيل التتبع لبرنامج __main__
عن طريق ضبط TOKAY_LOG
. يُستخدم هذا لبدء التتبع عندما يتم تجميع وتنفيذ المحلل اللغوي الداخلي بالفعل، وتحليل البرنامج الفعلي. يمكن تعيين TOKAY_LOG
على أي تنسيق متوافق مع RUST_LOG
، حيث يصبح RUST_LOG
بعد ذلك مباشرة.
$ TOKAY_LOG=debug tokay
TOKAY_DEBUG
و TOKAY_PARSER_DEBUG
قم بتعيين TOKAY_DEBUG
على مستوى التصحيح بين 1-6. يمكن تحقيق ذلك أيضًا باستخدام tokay -dddd
حيث يزيد كل d
من مستوى تصحيح الأخطاء. بالإضافة إلى ذلك، يمكن تعيين TOKAY_INSPECT
على اسم واحد أو قائمة من أسماء الأجزاء الجزئية (-البادئات) التي يجب فحصها في تتبع VM خطوة بخطوة ( TOKAY_DEBUG=6
).
مستوى | وضع |
---|---|
0 | لا التصحيح |
1 | طباعة شيدت AST |
2 | طباعة البرنامج المتوسط النهائي |
3 | طباعة برنامج VM المترجم |
4 | طباعة تتبع تنفيذ VM |
5 | طباعة محتويات مكدس VM |
6 | مصحح أخطاء كود التشغيل VM |
عرض AST الذي تم تحليله لبرنامج ما في مستوى التصحيح 1:
$ cargo run -q -- -d 'x = 42 print("Hello World " + x)' main [start 1:1, end 1:33] sequence [start 1:1, end 1:33] assign_drop [start 1:1, end 1:8] lvalue [start 1:1, end 1:3] identifier [start 1:1, end 1:2] => "x" value_integer [start 1:5, end 1:7] => 42 call [start 1:8, end 1:33] identifier [start 1:8, end 1:13] => "print" callarg [start 1:14, end 1:32] op_binary_add [start 1:14, end 1:32] value_string [start 1:14, end 1:28] => "Hello World " identifier [start 1:31, end 1:32] => "x"
يقوم TOKAY_PARSER_DEBUG
بتعيين مستوى التصحيح المحدد للمحلل اللغوي، والذي يتم تنفيذه في Tokay نفسه وهو جزء من المحول البرمجي. يمكن التعرف هنا على المستويات > 2 فقط، حيث أن AST الخاص بالمحلل اللغوي مدمج في الكود.
إليك مصحح أخطاء VM أثناء تشغيل برنامج "Hello World" البسيط:
`$ TOKAY_INSPECT="__main__" cargo run -q -- 'print("Hello World")'` __main__ --- Code --- __main__ 000 Offset(Offset { offset: 6, row: 1, col: 7 }) __main__ >001 LoadStatic(1) __main__ 002 Offset(Offset { offset: 0, row: 1, col: 1 }) __main__ 003 CallStaticArg((2, 1)) __main__ --- Reader --- __main__ offset=Offset { offset: 0, row: 1, col: 1 } __main__ eof=false __main__ --- Globals --- __main__ --- Stack --- __main__ --- Frames --- __main__ 000 capture: 0, reader: 0, fuse: None __main__ ip = 1 state = Ok(Push([59d29e639f88] "Hello World" (10))) __main__ --- Code --- __main__ 000 Offset(Offset { offset: 6, row: 1, col: 7 }) __main__ 001 LoadStatic(1) __main__ 002 Offset(Offset { offset: 0, row: 1, col: 1 }) __main__ >003 CallStaticArg((2, 1)) __main__ --- Reader --- __main__ offset=Offset { offset: 0, row: 1, col: 1 } __main__ eof=false __main__ --- Globals --- __main__ --- Stack --- __main__ 000 [59d29e639f88] "Hello World" (10) __main__ --- Frames --- __main__ 000 capture: 0, reader: 0, fuse: None Hello World __main__ ip = 3 state = Ok(Push([59d29e498fd8] void (10))) __main__ exit state = Ok(Push([59d29e498fd8] void (10)))
تمت تسمية لغة برمجة توكاي على اسم أبو بريص توكاي (Gekko gecko) من آسيا، وهو يصرخ "رمزًا" في الليل.
تم تصميم شعار وأيقونة Tokay لحسن الحظ بواسطة Timmytiefkuehl.
قم بمراجعة مستودع tokay-artwork للتعرف على إصدارات مختلفة من الشعار أيضًا.
حقوق الطبع والنشر © 2024 بواسطة Jan Max Meyer، Phorward Software Technologies.
Tokay هو برنامج مجاني بموجب ترخيص MIT.
يرجى الاطلاع على ملف الترخيص للحصول على التفاصيل.