تووه (زبان برنامه‌نویسی)

تووه ( ) یک زبان برنامه‌نویسی محرمانه است که در اوایل ۲۰۰۰ توسط جان کولاجیوایا اختراع شد. تووه یک فرازبان است که می‌تواند برای تعریف یا تشخیص زبان‌های نوع صفر در سسله‌مراتب چامسکی استفاده شود. به همین دلیل که این زبان برنامه‌نویسی می‌تواند زبان‌هایی با آن پیچیدگی را تعریف کند پس تورینگ‌کامل نیز هست. تووه بر اساس یک سامانهٔ بازنویسی رشته غیرقطعی به نام دستور زبان شبه تووه پایه‌گذاری شده‌است؛ که این دستور زبان نامش را از ریاضی‌دان نروژی اکسل تووه گرفته‌است. مؤلف تووه را بدین صورت تعریف می‌کند: «تووه یکی از ساده‌ترین روش‌های ممکن برای تفسیر برنامه‌نویسی محدود است. به زبانی دیگر یک تورینگ تارپیت است».

قوانین تولید 
یک برنامه تووه با یک پایگاه‌قانون شروع می‌شود، که یک سری از قوانین بدلی است، هر کدام بدین شکل(rhs و lhs پایین‌تر تعریف شده‌اند):
 lhs ::= rhs
این پایگاه‌قانون با یک سمبل تولید تنها در یک خط پایان می‌یابد:
 ::=
حالت اولیه یک سری از سمبل‌ها است که طبق پایگاه‌قانون هستند.

تووه با توجه به هر یک از سمبل‌های حالات اولیه از سمبل‌ها اولیه و بدل‌ها مصرف می‌کند.

تووه وقتی خاتمه می‌یابد که دیگر هیچ lhs(left hand side) ای در حالت خروجی(resultant) یافت نشود.

یادداشت‌ها 
 ::= «می‌تواند باشد» تلفظ می‌شود.
 lhs(left hand side) همان «دست چپ» است.
 rhs(right hand side) همان «دست راست» است.
 "::=" یعنی هرگز نمی‌تواند lhs باشد.
 ":::" یعنی یک جریان ورودی است.
 "~" یعنی یک جریان خروجی است.
 سامانهٔ شبه تووه یکی از هم‌ریخت‌های دستور زبان‌های بی‌محدودیت هستند.

فراخوانی تووه 
زمانی که با (debug) "d" فراخوانی می‌شود، حالت را چاپ می‌کند. زمانی که با (left side) "l" فراخوانی می‌شود، قوانین چپ به راست را اجرا می‌کند. زمانی که با (right side) "r" فراخوانی می‌شود، قوانین راست به چپ را اجرا می‌کند. در آخر "l" یا "r" گزینه‌های(switches) قبلی را لغو می‌کند.

برنامه‌های نمونه 
در این‌جا برنامهٔ سنتی «سلام دنیا!»(Hello World!) را در تووه می‌بینیم:

 a::=~Hello World!
 ::=
 a
برنامهٔ زیر یک برنامهٔ تووه برای افزایش یک عدد مبنای دو است، که به عنوان حالت اولیه وارد شده (که توسط کاراکترهای "_" احاطه شده‌است). در این‌جا عدد مورد نظر ۱۱۱۱۱۱۱۱۱۱ است:

 ۱_::=۱++
 ۰_::=۱
 ۰۱++::=۱۰
 ۱۱++::=۱++۰
 _۰::=_
 _۱++::=۱۰
 ::=
 _۱۱۱۱۱۱۱۱۱۱_

برنامهٔ زیر برای نشان دادن در زیر نمونه برنامه برای نشان دادن غیرقطعی بودن تووه است (و همچنین برای نشان دادن یک حلقهٔ بی‌نهایت). خروجی این برنامه یک دنبالهٔ بدون تعریف (تصادفی) از بیت‌هاست.

 b::=~۰
 b::=~۱
 ac::=abc
 ::=
 abc

جستارهای وابسته 
 الگوریتم مارکوف

پیوند به بیرون 
 زبان برنامه‌نویسی تووه
 سوالات متداول تووه
 تووه در دانش‌نامهٔ اسولنگ
 پست‌های وبلاگ دربارهٔ تووه
 مترجم جاوااسکریپت تووه

منابع 

زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۰۰ (میلادی)
زبان‌های برنامه‌نویسی محرمانه
ویکی‌سازی رباتیک