Helsingin yliopisto / tietojenkäsittelytieteen osasto / Ohjelmointikielten periaatteet / © Arto Wikla 2019

Ohjelmointikielten periaatteet: 1. harjoitukset 7.11.

Muutettu viimeksi 7.11.2019. Sivu luotu 18.10.2019.

  1. (kurssikirjan tehtävä 1.6.3)
    Describe the differences between the interpretative and compiled implementations of a programming language, emphasising the advantages and disadvantages.

  2. (kurssikirjan tehtävä 1.6.6)
    The first Pascal environments included: To implement the Pascal language in an interpretative way on a new host machine means (manually) translating the P-code interpreter into the language on the host machine. Given such an interpretative implementation, how can one obtain a compiled implementation for the same host machine, minimising the effort required? (Hint: think about a modification to the compiler for Pascal also written in Pascal.)

  3. (kurssikirjan tehtävä 4.6.1)
    Consider the following program fragment written in a pseudo-language which uses static scope and where the primitive read(Y) allows the reading of the variable Y from standard input.
      ...
      int X = 0;
      int Y;
    
      void fie() {
        X++;
      }
    
      void foo() {
        X++;
        fie();
      }
    
      read(Y);
      if Y > 0 {
        int X = 5;
        foo();
      }
      else
        foo();
    
      write(X);
    
    State what the printed values are.

  4. (kurssikirjan tehtävä 4.6.2)
    Consider the following program fragment written in a pseudo-language that uses dynamic scope.
      ...
      int X;
      X = 1;
      int Y;
     
      void fie() {
        foo();
        X = 0;
      }
    
      void foo() {
        int X;
        X = 5;
      }
    
      read(Y);
      if Y > 0 {
        int X;
        X = 4;
        fie();
      }
      else
        fie();
    
      write(X);
    
    State which is (or are) the printed values.

    1. (kurssikirjan tehtävä 4.6.4)
      Provide an example of a denotable object whose life is longer than that of the references (names, pointers, etc.) to it.
    2. (kurssikirjan tehtävä 4.6.5)
      Provide an example of a connection between a name and a denotable object whose life is longer than that of the object itself.

  5. Vertaile Javan ja Pythonin tavanomaisten toteutustapojen eroa; kääntäminen, tulkinta, välikieli, yms. Onko kielten toteustavoista myös muunnelmia?