For faster navigation, this Iframe is preloading the Wikiwand page for PL/0.

PL/0

Tento článek pojednává o jazyce pro výuku konstrukce překladačů. Možná hledáte: podmnožinu programovacího jazyka PL/1 firmy IBM.

PL/0 je programovací jazyk podobný jazyku Pascal, navržený pro výuku konstrukce překladačů. Jazyk PL/0 je velmi zjednodušený; má pouze jednoduché proměnné, celočíselné výrazy, operátory porovnání, řídicí konstrukce beginend, ifthen, whiledo a procedury bez parametrů. Kvůli těmto omezením je psaní programů v PL/0 nepraktické, lze však pro něj vytvářet jednoduché a kompaktní překladače, na kterých lze efektivně demonstrovat množství konceptů používaných při konstrukci překladačů.

Jazyk PL/0 použil Niklaus Wirth v roce 1976 pro ukázku konstrukce překladače ve své knize Algoritmy + datové struktury = programy.

Syntaxi jazyka PL/0 lze popsat v EBNF takto:

program = blok "." .

blok = [ "const" ident "=" číslo {"," ident "=" číslo} ";"]
       [ "var" ident {"," ident} ";"]
       { "procedure" ident ";" blok ";" } příkaz .

příkaz = [ ident ":=" výraz | "call" ident 
           | "?" ident | "!" výraz 
           | "begin" příkaz {";" příkaz } "end" 
           | "if" podmínka "then" příkaz 
           | "while" podmínka "do" příkaz ].

podmínka = "odd" výraz |
           výraz ("="|"#"|"<"|"<="|">"|">=") výraz .

výraz = [ "+"|"-"] term { ("+"|"-") term}.

term = faktor {("*"|"/") faktor}.

faktor = ident | číslo | "(" výraz ")".

Pro jazyk s takto jednoduchou syntaxí je poměrně jednoduché napsat analyzátor s rekurzivním sestupem. Proto se překladač PL/0 často používá při přednáškách o konstrukci překladačů. Základní PL/0 lze rozšiřovat o vlastnosti dobře známé z jiných jazyků. Studenti jej obvykle mají rozšířit o řídicí konstrukci repeatuntil i o pokročilejší vlastnosti, jako je předávání parametrů procedur, datové struktury jako pole a řetězce nebo o aritmetiku v pohyblivé řádové čárce.

V prosinci 1976 napsal Wirth malou knížečku o konstrukci překladačů, která obsahovala kompletní zdrojový kód překladače jazyka PL/0. Výše uvedená syntaktická pravidla byla převzata z prvního vydání Wirthovy knihy Compilerbau[1]. V pozdějších vydáních této knihy (pod vlivem svého probíhajícího výzkumu) změnil Wirth syntaxi jazyka PL/0. Změnil psaní klíčových slov jako const a procedure na velká písmena. Po této změně se PL/0 více podobá jazyku Modula-2. Současně Wirthův přítel a spolupracovník C. A. R. Hoare pracoval na svém vlivném konceptu komunikace sekvenčních procesů, který pro zápis komunikačních primitiv používal vykřičník ! a otazník ?. Wirth oba symboly přidal do jazyka PL/0, ale nikde v knize neuvádí jejich sémantiku.

Použití v vzdělávání

[editovat | editovat zdroj]

Původní článek o překladačích používá PL/0 pro demonstraci několika významných konceptů (postupné zjemňování, syntaktická analýza rekurzivním sestupem, EBNF, P-code, T-diagramy) studentům informatiky. Mnoho universitních přednášek o konstrukci překladačů kopíruje Wirthův přístup při používání těchto technik (viz reference níže). Klasická technika syntaktické analýzy rekurzivním sestupem je v některých přednáškách nahrazena nebo doplněna unixovým přístupem s využitím nástrojů lex a yacc (již také klasickým). Některé kurzy (PL/0 Language Tools) obsahují moderní koncepty, jako je objektově orientované programování a návrhové vzory s použitím moderních skriptovacích jazyků (Python) umožňující studentům pracovat s implementací v současném stylu programování.

Příklady

[editovat | editovat zdroj]

Následující příklad používá rozšíření jazyka PL/0 nazývaného PL/0E.[2]

VAR x, squ;

PROCEDURE square;
BEGIN
   squ:= x * x
END;

BEGIN
   x := 1;
   WHILE x <= 10 DO
   BEGIN
      CALL square;
      ! squ;
      x := x + 1
   END
END.

Tento program vypíše druhé mocniny čísel 1 až 10. Vykřičník se dnes obvykle nahrazuje voláním procedury WriteLn.

Následující příklad byl převzat z druhého vydání Wirthovy knihy Compilerbau,[1] vydané v roce 1986 v Německu:

CONST
  m =  7,
  n = 85;

VAR
  x, y, z, q, r;

PROCEDURE multiply;
VAR a, b;

BEGIN
  a := x;
  b := y;
  z := 0;
  WHILE b > 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 <= r DO w := 2 * w;
  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.

V třetím a posledním vydání své knihy o konstrukci překladačů nahradil Wirth PL/0 jazykem Oberon-0. Přestože je jazyk Oberon-0 mnohem složitější než PL/0, v knize je obsažen jeho kompletní překladač. Oberon-0 mimo jiné dovoluje použití polí, záznamů, deklarací typů a parametrů procedur. Vydavatelství Addison-Wesley nepokračuje ve vydávání Wirthových knih, ale Wirth v roce 2005 upravil třetí vydání své knihy a výsledek publikoval na internetu.[3]

V tomto článku byl použit překlad textu z článku PL/0 na anglické Wikipedii.

  1. a b Wirth, 1986
  2. PL/0E
  3. WIRTH, Niklaus. Compiler Construction [online]. 3., upravené. vyd. 1996, 2005 [cit. 2017-02-25]. Dostupné v archivu pořízeném dne 2017-02-17. ISBN 0-201-40353-6. 

Související články

[editovat | editovat zdroj]
  • P-code stroj

Externí odkazy

[editovat | editovat zdroj]
{{bottomLinkPreText}} {{bottomLinkText}}
PL/0
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?