2016年2月24日水曜日

開発環境

  • OS X El Capitan - Apple (OS)
  • Emacs(Text Editor)
  • Java (実行環境)

コンピュータシステムの理論と実装 (Noam Nisan (著)、Shimon Schocken (著)、斎藤 康毅(翻訳)、オライリージャパン)の12章(オペレーティングシステム)、12.5(プロジェクト)を取り組んでみる。

12.5(プロジェクト)

コード(Emacs)

String.jack

class String {
  field int len;
  field Array str;
  field boolean flag;

  constructor String new(int maxLength) {
    let len = 0;
    let str = Array.new(maxLength + 1);
    let flag = true;
    return this;
  }
  method void dispose() {
    do str.dispose();
    
    return;
  }
  method int length() {
    return len;
  }
  method char charAt(int j) {
    return str[j];
  }
  method void setCharAt(int j, char c) {
    let str[j] = c;
    
    return;
  }
  method String appendChar(char c) {
    let str[len] = c;
    let len = len + 1;

    return this;
  }
  method void eraseLastChar() {
    let len = len - 1;

    return;
  }
  method int intValue() {
    var int v;
    var int i;
    var int d;
    var int sign;
    
    let v = 0;
    let i = 0;

    let sign = 1;
    if (str[i] = 45 ) {
      let i = i + 1;
      let sign = -1;
    }
    while (i < len) {
      let d = str[i] - 48;
      let v = Math.multiply(v, 10) + d;
      let i = i + 1;
    }
    
    return Math.multiply(sign, v);
  }
  method void setInt(int number) {    
    var int lastDigit;

    if (flag) {
      let len = 0;
      let flag = false;
    }
    if (number < 0) {
      do Output.printString("Hit");
      do Output.println();
      do appendChar(45);
      let number = -number;
    }

    let lastDigit = number - Math.multiply(Math.divide(number, 10), 10);
    if (number < 10) {
      do appendChar(lastDigit + 48);
      let flag = true;
    } else {
      do setInt(Math.divide(number, 10));
      do appendChar(lastDigit + 48);
    }
    return;
  }
  function char newLine() {
    return 128;
  }
  function char backSpace() {
    return 129;
  }
  function char doubleQuote() {
    return 34;
  }
}

0 コメント:

コメントを投稿