2009年1月27日 星期二

CalculateMachine

利用lex and yacc 寫出一個calculate machine,也就是計算機。

在unix中lex and yacc是內建,但在ubuntu中要自己install flex 和 bison(據說flex and biosn 比 lex and yacc好)

sudo apt-get install flex
sudo apt-get install bison


並使用以下的指令來編譯:

flex test.l
bison -d test.y
gcc -g lex.yy.c y.tab.c -lfl -lm


其中,第二行-d是為了產生y.tab.h,給*.l檔include用;第三行 -lm不是必然要寫,若你寫的程式中包含了math.h中等數學函式,可能就要加 -lm,而-lfl是為了include lex library

code

寫完心得:

lex - 定義有意義的字串,將input的字串分類,並將yacc需要的字串傳給yacc。
yacc - 定義需要的字串(token),並將接收到的字串放入stack中,透過BNF,pop 需要計算的element和operator,計算完畢後再push到stack中,直到stack只剩下一個element,其值即為計算結果。

卡最久的大概就是 $$,$1,$2,.. 的使用,以下列為例:
expression '+' term { $$ = $1 + $3; }

$1:為 expression (pop stack[top-2])
$2:為 + (pop stack[top-1])
$3:為 term (pop stack[top])
$$:為計算後的值 (push stack)

2009年1月21日 星期三

兒童畫





















很像兒童畫畫對吧,這是用OpenGL撰寫出來的大自然風景畫,由我跟smile77615合力撰寫的計算機圖學期末報告,其中包含了彩虹,風車,昆蟲(mandelbrot set),大樹(binary tree),遍地小花與蔚藍的天空
code

乘法器

這學期學期初,計算機架構這門課教了乘法器的原理,其中有個乘法器是利用booth's algorithm 去實作,由於他可以計算正負號,所以自己就用vhdl寫看看

32bit 32cycle乘法器

原本寫booth's algorithm 乘法器是因為他可以運算正負號,微算機老師卻說:你可以加上絕對值在乘,乘完後再賦予sign值(原來還可以這樣做吼XD),為什麼要用32個cycle呢,你可以一次shift 2 bit 不是更快嗎(對吼XD)

2009年1月20日 星期二

回顧

回顧這一整個學期,我好像學了不少,也懂了不少,也看了不少影片。

以下是我這學期所學:
  • 計算機圖學,我學到一件事,就是比較會寫OpenGL
  • 程式語言,了解程式語言的演進和語言的共通特性
  • 作業系統,老實說我真不知道這堂課的重心在哪
  • 計算機網路,最讓我頭疼的一門科目,不想背書卻又得背,但我知道重心就是如何傳送訊息到目的地
  • 計算機架構,分解MIPS並了解CPU的架構與執行,以及pipeline所遇到的hazard和解決方法
  • 機率與統計,整學期重點,總共三個,random variable,expected value, and variance
  • 物件導向軟體設計,知道UML圖,但不一定會畫XD
  • 知識管理,管理知識很重要,學習了用架站的方式管理知識
  • 微算機實驗,8051的指令很難寫