程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> PL/0語言編譯解釋程序實現1(C語言),pl

PL/0語言編譯解釋程序實現1(C語言),pl

編輯:C++入門知識

PL/0語言編譯解釋程序實現1(C語言),pl


本文地址:http://www.cnblogs.com/archimedes/p/pl0-compiler1.html,轉載請注明源地址。

PL/0簡介

以下內容摘自維基:

PL/0,is similar to but much simpler than the general-purpose programming language Pascal, intended as an educational programming language. It serves as an example of how to construct a compiler. It was originally introduced in the book, Algorithms + Data Structures = Programs, by Niklaus Wirth in 1975. It features quite limited language constructs: there are no real numbers, very few basic arithmetic operations and no control-flow constructs other than "if" and "while" blocks. While these limitations make writing real applications in this language impractical, it helps the compiler remain compact and simple.

翻譯如下:

PL/0語言,作為一個教育用的編程語言,和通用編程語言Pascal有些類似但是要簡單得多。作為如何構建一個編譯器的一個例子。它最初是出自Niklaus Wirth於1975年寫的《算法+數據結構=程序》一書中。它具有非常有限的語言構造:沒有實數,只有很少量的基本算術運算,除了"if"和"while"語句塊以外沒有其他的控制流。雖然這些限制使這種語言在實際應用中受到限制,但它卻有助於編譯器保持緊湊和簡單。

PL/0語言是PASCAL語言的子集

同PASCAL

  作用域規則(內層可引用包圍它的外層定義的標識符),上下文約束,過程可嵌套定義,可遞歸調用

子集

數據類型,只有整型

數據結構 ,只有簡變和常數

數字最多為14位

標識符的有效長度是10

語句種類

過程最多可嵌套三層

從上面的敘述可以看出,熟悉PL/0的相關指令,並能用其他語言(我選擇C語言)來寫一個簡單的解釋器,在某種程度上掌握一些編譯器的原理,提高自身的編程能力

PL/0程序示例

舉幾個實例更加的直觀:

1、計算最大公約數

var m, n, r, q;
{ 計算m和n的最大公約數 }
procedure  gcd;
    begin
        while r#0  do 
             begin
                 q := m / n;
                  r := m - q * n;
                 m := n;
                 n := r;
             end
   end;
begin
     read(m);
     read(n);
     { 為了方便,規定m >= n }
     if m < n then
         begin
              r := m;
              m := n;
              n := r;
         end;
     begin
         r:=1;
         call gcd;
         write(m);
     end;
end.

2、計算 sum = 1! + 2 ! + ... + n!  (n從控制台讀入)

var n, m, fact, sum;
{ 遞歸計算 fact = m! }
procedure factorial;
    begin
        if m > 0 then
            begin
                fact := fact * m;
                m := m - 1;
                call factorial;
            end;
    end;
begin
     {讀入n }
     read(n);
     sum := 0;
     while n > 0 do
          begin
               m := n;
               fact := 1;
               call factorial;
               sum  := sum + fact;
               n := n - 1;
          end;
          {輸出n! }
          write(sum);
end.

對於上面的代碼,熟悉Pascal語言的同學應該很熟悉,沒錯,pl/0就是簡化版本的pascal,為了降低設計編譯程序的難度而故意為之專供教學用的。

PL/0編譯程序

PL/0編譯系統

類pcode代碼指令的結構

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved