پی‌ال/۰

حداقل دو زبان برنامه‌نویسی با نام PL/0 شناخته شده‌است. یکی از آن‌ها زیر مجموعه‌ای از آی بی‌ام برای اهداف عمومی است که زبان برنامه‌نویسی PL/1 نام دارد.
دیگری PL/0 است، که در این مقاله توضیح داده می‌شود. این مشابه اما بسیار ساده‌تر از برنامه‌نویسی همه منظوره زبان پاسکال است و در نظر گرفته شده به عنوان یک زبان برنامه‌نویسی آموزشی است. آن را به عنوان یک مثال از چگونگی ساخت یک کامپایلر بکار می‌برند. این در اصل در کتاب "الگوریتم + ساختمان داده = برنامه"، توسط آقای نیکلاوس ویرت در سال ۱۹۷۵ معرفی شد.
ویژگی‌های کاملا محدود شده ساختار زبان: اعداد حقیقی وجود ندارند، عملیات محاسباتی اساسی خیلی کم و ساختارهای کنترلی غیر از if و while ندارد.
در حالیکه این محدودیت‌ها باعث می‌شود تا نوشتن برنامه‌های کاربردی واقعی در این زبان غیر عملی باشد. این کمک می‌کند تا کامپایلر جمع و جور و ساده باقی بماند.
گرامر
در زیر به عنوان مثال قواعد نحو مدل زبان که در BNF توسعه داده شده (EBNF) تعریف شده‌است می‌آید:
program = block ".".
block = "const" ident "=" number {"," ident "=" number ";"
"var" ident {"," ident ";"
{ "procedure" ident ";" block ";" statement.
statement = "call" ident .
condition = "odd" expression |
expression ("="|"#"|" "|">=") expression.
expression = "-" term { ("+"|"-") term.
term = factor {("*"|"/") factor.
factor = ident | number | "(" expression ")".
این خیلی ساده است برای دانشجویان که یک سری تجزیه‌کننده (parser) بازگشتی برای چنین نحو ساده‌ای بنویسند. بنابراین کامپایلر PL/0 هنوز به‌طور گسترده‌ای در دوره‌های ساخت و ساز کامپایلر در سرتاسر جهان استفاده می‌شود.
با توجه به نبود ویژگی‌ها در مشخصات اصلی، دانشجویان معمولا بیشتر وقت خود را در گسترش زبان و کامپایلر خود می‌گذرانند. آن‌ها معمولا با معرفی REPEAT…UNTIL شروع می‌کنند و ادامه می‌دهند با بیشتر ویژگی‌های پیشرفته مثل پارامترهای گذرنده به توابع یا داده ساختارهایی شبیه آرایه‌ها، رشته‌ها یا اعداد دارای ممیز شناور.
استفاده برای آموزش
مقاله اصلی در افتخارات کامپایلرهای PL/0 برای معرفی چندین مفهوم نفوذ (پالایش گام به گام، ، ، ، ) در این زمینه توسط دانشجویانی که از این مفاهیم استفاده می‌کنند. در طول 3 دهه گذشته بیشتر دوره‌های دانشگاهی در مورد ساختارهای کامپایلرها که از PL/0 استفاده می‌کنند، توسط آقای Wirth به شدت در استفاده از این تکنیکها دنبال شده‌اند. چند سال پیش دوره‌های دانشگاهی اقدام کردند به منحرف کردن از دوره بنیان نهاده شده توسط آقای Wirth با جایگزینی تکنیکهای کلاسیک با یک رویکرد شبه یونیکسی ( ) از استفاده lex و yacc.
فقط اخیرا یک پیاده‌سازی (ابزارهای زبان PL/0) در طول این راه، نیز مفاهیم مدرن ترکیب شده‌ای مانند شی گرایی و طراحی الگوی با یک Scripting Language (مانند Python)، اجازه می‌دهد که دانشجویان تا متن سورسی از پیاده‌سازی را در یک سبک امروزی مصرف کنند و بکار برند.
ساختار کامپایلر
در دسامبر سال 1976 ، آقای Wirth یک کتابچه کوچک در مورد ساخت و ساز کامپایلر نوشت. که شامل کد سورس کامل از کامپایلر PL/0 است.
قواعد نحو بیان شده در بالا از اولین ویرایش کتاب Compilerbau آقای Wirth برگرفته شده‌است. او املا کلمات کلیدی مانند const را تغییر داد و تغییر توابع به حروف بزرگ تغییر املایی دیگر بود. در همان زمان دوست و همکار آقای Wirth، آقای CAR Hoare روی مفهوم پردازشهای ترتیبی کار می‌کرد که از علامت تعجب (!) و علامت سوال (؟) برای مشخص کردن ارتباطات اولیه استفاده می‌شد. آقای Wirth هر دو علامت را به زبان PL/0 افزود، اما او معانی آن‌ها را در کتاب ذکر نکرد.
مثال
مثال زیر برگرفته شده از یک زبان توسعه داده شده به نام PL/0E است:
VAR x, squ;
PROCEDURE square;
BEGIN
squ:= x * x
END;
BEGIN
x := 1;
WHILE x
0 DO BEGIN
IF ODD b THEN z := z + a;
a := 2 * a;
b := b / 2
END
END;
PROCEDURE divide;
VAR w;
BEGIN
r := x;
q := 0;
w := y;
WHILE w y DO BEGIN
q := 2 * q;
w := w / 2;
IF w <= r THEN BEGIN
r := r - w;
q := q + 1
END
END
END;
PROCEDURE gcd;
VAR f, g;
BEGIN
f := x;
g := y;
WHILE f # g DO BEGIN
IF f < g THEN g := g - f;
IF g < f THEN f := f - g
END;
z := f
END;
BEGIN
x := m;
y := n;
CALL multiply;
x := 25;
y := 3;
CALL divide;
x := 84;
y := 36;
CALL gcd
END.
Oberon-0
آقای Wirth ، در سومین و آخرین ویرایش از کتاب خود در مورد ساخت و ساز کامپایلر، PL/0 را با Oberon-0 جایگزین کرده‌است.
کامپایلر هنوز هم در تمامیت خود ارائه شده است، اگرچه زبان Oberon-0 بسیار پیچیده‌تر از PL/0 است. برای مثال، Oberon-0 آرایه‌ها، رکوردها، اعلام نوع‌ها و پارامترهای تابع را پیشنهاد داد.
ناشر کتابهای آقای Wirth ( ) مصمم است که همه کتابهایش را خارج کند، اما آقای Wirth ویرایش سوم از کتاب خود را در سال 2005 تجدید چاپ کرده‌است و الان نیز آنلاین در دسترس است.
P-code machine