عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

FileCheck-3.6 - عبر الإنترنت في السحابة

قم بتشغيل FileCheck-3.6 في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر FileCheck-3.6 الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


FileCheck - أداة التحقق من مطابقة الأنماط المرنة للملفات

موجز


الاختيار ملف اسم ملف المباراة [--check-prefix=XXX] [--مسافة بيضاء صارمة]

الوصف


الاختيار ملف يقرأ ملفين (واحد من الإدخال القياسي، والآخر محدد في سطر الأوامر)
ويستخدم أحدهما للتحقق من الآخر. هذا السلوك مفيد بشكل خاص لمجموعة الاختبار،
الذي يريد التحقق من أن إخراج بعض الأدوات (على سبيل المثال ذ.م.م) يحتوي على المتوقع
المعلومات (على سبيل المثال، movsd من esp أو أي شيء مثير للاهتمام). هذا مشابه
لاستخدام البقرى، ولكن تم تحسينه لمطابقة عدة مدخلات مختلفة في ملف واحد في ملف
ترتيب محدد.

اسم ملف المباراة يحدد الملف الملف الذي يحتوي على الأنماط المراد مطابقتها. الملف
للتحقق من القراءة من الإدخال القياسي ما لم يكن - ملف الإدخال يستخدم الخيار.

OPTIONS


-مساعدة اطبع ملخصًا لخيارات سطر الأوامر.

--check-prefix بادئة
يقوم FileCheck بالبحث في محتويات اسم ملف المباراة لتتناسب الأنماط. بواسطة
افتراضيًا، تكون هذه الأنماط مسبوقة بـ "التحقق من:". إذا كنت ترغب في استخدام أ
بادئة مختلفة (على سبيل المثال لأن نفس ملف الإدخال يقوم بالتحقق من عدة ملفات مختلفة
أداة أو خيارات)، و --check-prefix تسمح لك الوسيطة بتحديد واحد أو أكثر
البادئات للمطابقة. البادئات المتعددة مفيدة للاختبارات التي قد تتغير
خيارات تشغيل مختلفة، لكن معظم الخطوط تظل كما هي.

- ملف الإدخال اسم الملف
الملف المطلوب فحصه (الافتراضي هو stdin).

--مسافة بيضاء صارمة
افتراضيًا، يقوم FileCheck بتحديد المسافة البيضاء الأفقية للإدخال (المسافات وعلامات التبويب)
مما يؤدي إلى تجاهل هذه الاختلافات (ستتطابق المسافة مع علامة التبويب). ال
--مسافة بيضاء صارمة الوسيطة تعطل هذا السلوك. تسلسلات نهاية السطر هي
متعارف عليه لنمط UNIX \n في جميع الأوضاع.

--ضمني-الاختيار-لا تحقق نمط
إضافة اختبارات سلبية ضمنية للأنماط المحددة بين عمليات التحقق الإيجابية.
يسمح الخيار بكتابة اختبارات أكثر صرامة دون حشوها تحقق من عدمs.

على سبيل المثال، "--ضمني-الاختيار-لا تحذير:"يمكن أن يكون مفيدًا عند اختبار التشخيص
رسائل من أدوات لا تحتوي على خيار مشابه لـ قعقع -تحقق. مع هذا
سيتحقق خيار FileCheck من أن الإدخال لا يحتوي على تحذيرات لا يغطيها
أي وقت التحقق من: أنماط - رسم.

-الإصدار
أظهر رقم إصدار هذا البرنامج.

EXIT الوضع


If الاختيار ملف يتحقق من أن الملف يطابق المحتويات المتوقعة، ويخرج بـ 0.
وإلا، إذا لم يكن الأمر كذلك، أو في حالة حدوث خطأ، فسيتم الخروج بقيمة غير الصفر.

TUTORIAL


عادةً ما يتم استخدام FileCheck من اختبارات الانحدار LLVM، حيث يتم استدعاؤه في سطر RUN الخاص بـ
الاختبار. يبدو المثال البسيط لاستخدام FileCheck من سطر RUN كما يلي:

; تشغيل: llvm-as < %s | ذ م م -march=x86-64 | فحص الملفات %s

يقول بناء الجملة هذا توجيه الملف الحالي ("%s") إلى لفم مثل، قم بتوصيل ذلك إلى ذ.م.م، ثم
أنبوب الإخراج ذ.م.م إلى الاختيار ملف. وهذا يعني أن FileCheck سوف يتحقق من صحة بياناته
الإدخال القياسي (مخرج llc) مقابل وسيطة اسم الملف المحددة (الملف الأصلي
الملف المحدد بواسطة "%s"). لنرى كيف يعمل هذا، دعونا نلقي نظرة على بقية ملف
(بعد سطر RUN):

تعريف الفراغ @sub1(i32* %p, i32 %v) {
دخول:
; تحقق: فرعي 1:
; تحقق: فرعي
%0 = استدعاء ذيل i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
اعتزل الفراغ
}

تعريف الفراغ @inc4(i64* %p) {
دخول:
; تحقق: بما في ذلك 4:
; تحقق: متضمنة
%0 = استدعاء ذيل i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
اعتزل الفراغ
}

هنا يمكنك رؤية بعض "التحقق من:" الأسطر المحددة في التعليقات. الآن يمكنك أن ترى كيف تم الملف
إلى لفم مثل، ثم ذ.م.م، وإخراج كود الجهاز هو ما نتحقق منه.
يتحقق FileCheck من إخراج رمز الجهاز للتأكد من مطابقته لما "التحقق من:" خطوط
حدد.

بناء الجملة "التحقق من:"السطور بسيطة جدًا: فهي عبارة عن سلاسل ثابتة يجب أن تحدث فيها
طلب. يقوم FileCheck افتراضيًا بتجاهل اختلافات المسافات البيضاء الأفقية (على سبيل المثال، المسافة هي
يُسمح بمطابقة علامة تبويب) ولكن بخلاف ذلك، فإن محتويات "التحقق من:"الخط مطلوب ل
تطابق بعض الشيء في ملف الاختبار تمامًا.

أحد الأشياء الجميلة في FileCheck (مقارنةً بـ grep) هو أنه يسمح بدمج حالات الاختبار
معًا في مجموعات منطقية. على سبيل المثال، لأن الاختبار أعلاه يتحقق من وجود
"فرعي 1:"و"بما في ذلك 4:"التسميات، لن تتطابق إلا إذا كان هناك"subl"بين هؤلاء
تسميات. إذا كان موجودًا في مكان آخر في الملف، فلن يتم احتساب ذلك: "البقرى subl"
يطابق إذا "subl" موجود في أي مكان في الملف.

الاختيار ملف -التحقق من البادئة خيار
فحص الملف -التحقق من البادئة يسمح الخيار بتكوينات اختبار متعددة يتم تشغيلها منها
صورة واحدة؟ ملف. وهذا مفيد في العديد من الظروف، على سبيل المثال، اختبار مختلف
المتغيرات المعمارية مع ذ.م.م. إليك مثال بسيط:

; تشغيل: llvm-as < %s | ذ م م -mtriple=i686-apple-darwin9 -mattr=sse41 \
; تشغيل: | فحص الملف %s -check-prefix=X32
; تشغيل: llvm-as < %s | ذ م م -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
; تشغيل: | فحص الملف %s -check-prefix=X64

تعريف <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nonwind {
%tmp1 = عنصر الإدراج <4 x i32>; %tmp، i32 %s، i32 1
أرجع <4 x i32> %tmp1
; X32: دبابيسrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0

; X64: دبابيسrd_1:
; X64: pinsrd $1، %edi، %xmm0
}

في هذه الحالة، نحن نختبر حصولنا على توليد التعليمات البرمجية المتوقع مع كل من 32 بت و
توليد كود 64 بت.

التحقق من التالي: توجيهات
في بعض الأحيان تريد مطابقة الأسطر وترغب في التحقق من حدوث التطابقات تمامًا
خطوط متتالية لا يوجد بينها خطوط أخرى. في هذه الحالة يمكنك استخدام "التحقق من:"
و"التحقق من التالي:" توجيهات لتحديد هذا. إذا قمت بتحديد بادئة تحقق مخصصة،
فقط استخدم "-التالي:". على سبيل المثال، شيء من هذا القبيل يعمل كما تتوقع:

حدد الفراغ @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
%tmp3 = تحميل <2 × مزدوج>* %A، محاذاة 16
%tmp7 = عنصر الإدخال <2 x double> undef، double %B، i32 0
%tmp9 = shufflevector <2 x double> %tmp3,
<2 × مزدوج> %tmp7،
<2 × i32> < i32 0, i32 2 >
قم بتخزين <2 x double> %tmp9، <2 x double>* %r، محاذاة 16
اعتزل الفراغ

; التحقق: ر2:
; تحقق: movl 8(%esp), %eax
; التحقق من التالي: movapd (%eax)، %xmm0
; التحقق من التالي: movhpd 12(%esp), %xmm0
; التحقق من التالي: movl 4(%esp), %eax
; التحقق من التالي: movapd %xmm0، (%eax)
; التحقق من التالي: متقاعد
}

"التحقق من التالي:"ترفض التوجيهات الإدخال ما لم يكن هناك سطر جديد واحد بالضبط بينه
والتوجيه السابق . أ "التحقق من التالي:"لا يمكن أن يكون التوجيه الأول في الملف.

التحقق من عدم: توجيهات
ال "التحقق من عدم:"يتم استخدام التوجيه للتحقق من عدم حدوث سلسلة بين اثنين
المباريات (أو قبل المباراة الأولى، أو بعد المباراة الأخيرة). على سبيل المثال، للتحقق من ذلك
تتم إزالة الحمل عن طريق التحويل، ويمكن استخدام اختبار مثل هذا:

حدد i8 @coerce_offset0(i32 %V, i32* %P) {
تخزين i32 %V، i32* %P

%P2 = البث البتي i32* %P إلى i8*
%P3 = getelementptr i8* %P2, i32 2

%A = تحميل i8* %P3
ريت i8 %أ
; تحقق: @coerce_offset0
; التحقق من عدم: التحميل
; تحقق: أرجع i8
}

تحقق-DAG: توجيهات
إذا كان من الضروري مطابقة السلاسل التي لا تحدث بترتيب تسلسلي صارم،
"تحقق-DAG:"يمكن استخدامها للتحقق منها بين مباراتين (أو قبل المباراة الأولى،
أو بعد المباراة الأخيرة). على سبيل المثال، يصدر clang عناصر vtable globals بترتيب عكسي. استخدام
تحقق-DAG:يمكننا الاحتفاظ بالشيكات بالترتيب الطبيعي:

// تشغيل: %clang_cc1 %s -emit-llvm -o - | فحص الملفات %s

struct Foo { طريقة الفراغ الظاهري () ؛ };
فو و؛ // انبعاث vtable
// التحقق من DAG: @_ZTV3Foo =

شريط البنية {طريقة الفراغ الافتراضية () ؛ };
شريط ب؛
// التحقق من DAG: @_ZTV3Bar =

التحقق من عدم: يمكن خلط التوجيهات مع تحقق-DAG: توجيهات لاستبعاد السلاسل بين
الوسط المحيط تحقق-DAG: التوجيهات. ونتيجة لذلك، المحيطة تحقق-DAG: توجيهات
لا يمكن إعادة ترتيبها، أي مطابقة جميع الأحداث تحقق-DAG: قبل التحقق من عدم: ممنوع
تتخلف عن مطابقة الأحداث تحقق-DAG: بعد التحقق من عدم:. على سبيل المثال،

; تحقق من DAG: قبل
; التحقق من عدم: لا
; تحقق-DAG: بعد

سترفض هذه الحالة سلاسل الإدخال حيث BEFORE يحدث بعد AFTER.

مع المتغيرات الملتقطة، تحقق-DAG: قادر على مطابقة الطلبات الطوبولوجية الصحيحة لـ DAG
مع حواف من تعريف المتغير إلى استخدامه. إنه مفيد، على سبيل المثال، عندما يكون لديك
تحتاج حالات الاختبار إلى مطابقة تسلسلات إخراج مختلفة من برنامج جدولة التعليمات. ل
مثال،

; CHECK-DAG: أضف [[REG1:r[0-9]+]], r1, r2
; CHECK-DAG: أضف [[REG2:r[0-9]+]], r3, r4
; الفحص: mul r5، [[REG1]]، [[REG2]]

في هذه الحالة، أي أمر من ذلك اثنين تضيف سيتم السماح بالتعليمات.

إذا كنت تحدد و باستخدام المتغيرات في نفسه تحقق-DAG: كتلة، كن على علم بأن
يمكن أن تتطابق قاعدة التعريف بعد استخدامه.

لذلك، على سبيل المثال، سيتم تمرير الكود أدناه:

; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
; التحقق من DAG: vmov.32 [[REG2]] [1]
vmov.32 د0[1]
vmov.32 د0[0]

في حين أن هذا الرمز الآخر لن:

; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
; التحقق من DAG: vmov.32 [[REG2]] [1]
vmov.32 د1[1]
vmov.32 د0[0]

في حين أن هذا يمكن أن يكون مفيدًا جدًا، إلا أنه خطير أيضًا، لأنه في حالة التسجيل
تسلسل، يجب أن يكون لديك ترتيب قوي (اقرأ قبل الكتابة، انسخ قبل الاستخدام، وما إلى ذلك). إذا
التعريف الذي يبحث عنه الاختبار الخاص بك غير متطابق (بسبب خطأ في المترجم)، فهو
قد يتطابق بعيدًا عن الاستخدام، ويخفي الأخطاء الحقيقية بعيدًا.

في تلك الحالات، لتنفيذ الأمر، استخدم توجيهًا غير DAG بين كتل DAG.

علامة الاختيار: توجيهات
في بعض الأحيان في ملف يحتوي على اختبارات متعددة مقسمة إلى كتل منطقية، واحدة أو أكثر
التحقق من: قد تنجح التوجيهات عن غير قصد عن طريق مطابقة الأسطر في كتلة لاحقة. في حين أن
عادةً ما يتم إنشاء خطأ في النهاية، وقد لا يتم إنشاء الشيك الذي تم وضع علامة عليه على أنه يسبب الخطأ
في الواقع تتحمل أي علاقة بالمصدر الفعلي للمشكلة.

ومن أجل إنتاج رسائل خطأ أفضل في هذه الحالات،علامة الاختيار:"يمكن التوجيه
يستخدم. يتم التعامل معه بشكل مماثل للطبيعي التحقق التوجيه إلا أن FileCheck يجعل
افتراض إضافي مفاده أن السطر المطابق للتوجيه لا يمكن مطابقته أيضًا
أي شيك آخر موجود اسم ملف المباراة; هذا مخصص للاستخدام في الخطوط
تحتوي على تسميات أو معرفات فريدة أخرى. من الناحية المفاهيمية، فإن وجود علامة الاختيار
يقسم دفق الإدخال إلى كتل منفصلة، ​​تتم معالجة كل منها بشكل مستقل،
منع أ التحقق من: التوجيه في كتلة واحدة يطابق سطرًا في كتلة أخرى. على سبيل المثال،

حدد %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
دخول:
; علامة الاختيار: C_ctor_base:
; تحقق: mov [[SAVETHIS:r[0-9]+]], r0
; التحقق من: bl A_ctor_base
; تحقق: mov r0، [[حفظ هذا]]
%0 = البث البتي %struct.C* %هذا إلى %struct.A*
%call = استدعاء ذيل %struct.A* @A_ctor_base(%struct.A* %0)
%1 = البث البتي %struct.C* %هذا إلى %struct.B*
%call2 = استدعاء ذيل %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
استرجع %struct.C* %this
}

حدد %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
دخول:
; علامة الاختيار: D_ctor_base:

استخدام علامة الاختيار: التوجيهات في هذه الحالة تضمن أن الثلاثة التحقق من: توجيهات
تقبل فقط الخطوط المقابلة لجسم @C_ctor_base الوظيفة، حتى لو كانت
تتطابق الأنماط مع الخطوط الموجودة لاحقًا في الملف. علاوة على ذلك، إذا كان واحدا من هؤلاء الثلاثة التحقق من:
إذا فشلت التوجيهات، فسوف يتعافى FileCheck من خلال الاستمرار في الكتلة التالية، مما يسمح بعدة توجيهات
اكتشاف فشل الاختبار في استدعاء واحد.

ليس هناك شرط لذلك علامة الاختيار: تحتوي التوجيهات على سلاسل تتوافق مع
التسميات النحوية الفعلية في لغة المصدر أو لغة الإخراج: يجب أن تتطابق ببساطة بشكل فريد مع أ
سطر واحد في الملف الذي يتم التحقق منه.

علامة الاختيار: لا يمكن أن تحتوي التوجيهات على تعريفات أو استخدامات متغيرة.

الاختيار ملف نمط مطابقة بناء الجملة
ال "التحقق من:"و"التحقق من عدم:"تتخذ كل من التوجيهات نمطًا مطابقًا. بالنسبة لمعظم استخدامات
FileCheck، مطابقة السلسلة الثابتة كافية تمامًا. لبعض الأشياء، وأكثر من ذلك
الشكل المرن للمطابقة هو المطلوب. لدعم هذا، يسمح لك FileCheck بتحديد
التعبيرات العادية في سلاسل متطابقة، محاطة بأقواس مزدوجة: {{yourregex}}.
لأننا نريد استخدام مطابقة السلسلة الثابتة لغالبية ما نقوم به، فقد قام FileCheck بذلك
تم تصميمه لدعم الخلط والمطابقة بين سلسلة ثابتة ومطابقة مع السلسلة العادية
التعبيرات. هذا يسمح لك بكتابة أشياء مثل هذا:

; التحقق: movhpd {{[0-9]+}}(%esp)، {{%xmm[0-7]}}

في هذه الحالة، سيتم السماح بأي إزاحة من سجل ESP، وأي سجل xmm سيتم السماح به
مسموح.

نظرًا لأن التعبيرات العادية محاطة بأقواس مزدوجة، فهي متميزة بصريًا،
ولا تحتاج إلى استخدام أحرف الهروب داخل الأقواس المزدوجة كما تفعل في لغة C.
في الحالات النادرة التي تريد فيها مطابقة الأقواس المزدوجة بشكل صريح من الإدخال، يمكنك ذلك
استخدام شيء قبيح مثل {{[{][{]}} كما النمط الخاص بك.

الاختيار ملف المتغيرات
غالبًا ما يكون من المفيد مطابقة النمط ثم التحقق من حدوثه مرة أخرى لاحقًا في
ملف. بالنسبة لاختبارات إنشاء الكود، قد يكون هذا مفيدًا للسماح بأي تسجيل، ولكن تحقق من ذلك
يتم استخدام التسجيل باستمرار في وقت لاحق. لفعل هذا، الاختيار ملف يسمح للمتغيرات المسماة أن تكون
محددة واستبدالها في الأنماط. اليك مثال بسيط:

; تحقق: الاختبار 5:
; التحقق: ليس [[التسجيل:%[az]+]]
; التحقق من: andw {{.*}}[[تسجيل]]

يتطابق سطر الاختيار الأول مع regex %[أز]+ ويلتقطه في المتغير سجل .
السطر الثاني يتحقق من أن كل ما هو موجود سجل يحدث لاحقًا في الملف بعد
"و". الاختيار ملف يتم تضمين المراجع المتغيرة دائمًا في [[ ]] أزواج، و
يمكن تشكيل الأسماء باستخدام regex [a-zA-Z][a-zA-Z0-9]*. إذا كانت النقطتان تتبعان الاسم،
فهو تعريف للمتغير؛ وإلا فهو استخدام.

الاختيار ملف يمكن تعريف المتغيرات عدة مرات، والاستخدامات دائمًا تحصل على أحدث قيمة.
يمكن أيضًا استخدام المتغيرات لاحقًا على نفس السطر الذي تم تعريفها عليه. على سبيل المثال:

; التحقق: المرجع [[REG:r[0-9]+]]، [[REG]]

يمكن أن يكون مفيدًا إذا كنت تريد معاملات op ليكون نفس التسجيل، ولا يهمك
بالضبط الذي سجل هو.

الاختيار ملف التعبيرات
في بعض الأحيان تكون هناك حاجة للتحقق من الإخراج الذي يشير إلى أرقام الأسطر لملف المطابقة،
على سبيل المثال عند اختبار تشخيص المترجم. يقدم هذا هشاشة معينة للمباراة
بنية الملف، كما "التحقق من:"تحتوي الأسطر على أرقام الأسطر المطلقة في نفس الملف، والتي
يجب تحديثه كلما تغيرت أرقام الأسطر بسبب إضافة النص أو حذفه.

لدعم هذه الحالة، يسمح FileCheck باستخدام [[@خط]], [[@LINE+ ]],
[[@خط- ]] التعبيرات في الأنماط. وتتسع هذه التعبيرات إلى عدد من
الخط الذي يقع فيه النمط (مع إزاحة عدد صحيح اختياري).

بهذه الطريقة يمكن وضع أنماط المطابقة بالقرب من خطوط الاختبار ذات الصلة وتضمين الخط النسبي
مراجع الأرقام، على سبيل المثال:

// التحقق: test.cpp:[[@LINE+4]]:6: خطأ: متوقع ';' بعد معلن المستوى الأعلى
// التحقق من التالي: {{^int a}}
// التحقق من التالي: {{^ \^}}
// التحقق من التالي: {{^ ;}}
كثافة العمليات أ

استخدم FileCheck-3.6 عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

  • 1
    البرنامج المساعد Eclipse Tomcat
    البرنامج المساعد Eclipse Tomcat
    يوفر البرنامج المساعد Eclipse Tomcat
    تكامل بسيط لسيرفليت القط
    حاوية لتطوير جافا
    تطبيقات الويب. يمكنك الانضمام إلينا من أجل
    مناقشة ...
    تنزيل البرنامج المساعد Eclipse Tomcat
  • 2
    WebTorrent سطح المكتب
    WebTorrent سطح المكتب
    WebTorrent Desktop مخصص للبث
    التورنت على أنظمة تشغيل Mac أو Windows أو Linux. هو - هي
    يتصل بكل من BitTorrent و
    أقران WebTorrent. الآن لا يوجد
    بحاجة إلى الانتظار ...
    قم بتنزيل WebTorrent Desktop
  • 3
    GENX
    GENX
    GenX هو برنامج علمي للتحسين
    انعكاس الأشعة السينية ، النيوترون
    الانعكاسية والأشعة السينية السطحية
    بيانات الحيود باستخدام التفاضل
    خوارزمية التطور ....
    تحميل جين اكس
  • 4
    com.pspp4windows
    com.pspp4windows
    PSPP هو برنامج إحصائي
    تحليل البيانات المأخوذة. إنه مجاني
    استبدال البرنامج الاحتكاري
    SPSS. يحتوي PSPP على كل من ملفات
    رسومية لنا ...
    تنزيل pspp4windows
  • 5
    ملحقات Git
    ملحقات Git
    Git Extensions هي أداة قائمة بذاتها لواجهة المستخدم
    لإدارة مستودعات Git. كذلك
    يتكامل مع Windows Explorer و
    مايكروسوفت فيجوال ستوديو
    (2015/2017/2019). ذ...
    تنزيل Git Extensions
  • 6
    eSpeak: تركيب الكلام
    eSpeak: تركيب الكلام
    محرك تحويل النص إلى كلام للغة الإنجليزية و
    العديد من اللغات الأخرى. حجم صغير مع
    نطق واضح ولكن مصطنع.
    متاح كبرنامج سطر أوامر بامتداد
    عديدة ...
    تنزيل eSpeak: تركيب الكلام
  • أكثر "

أوامر لينكس

Ad