編譯程式設計 期末專題說明 V1.1 May 2004.

Slides:



Advertisements
Similar presentations
教育概論 幼一甲 第四小組 1.林瑞敏 2.許曉文 20.張舒婷 21.陳香如.
Advertisements

為什麼要讀書?.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
Word高级应用——制作毕业论文 Word高级应用——制作毕业论文 6..
搜索与回朔算法 搜索与回朔是计算机解题中常用的算法,很多无法根据某种确定的计算法则来求解的问题,可以利用搜索与回朔方法求解。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索的过程中,一旦发现原来的选择是错误的,就退回一步重新选择,然后再继续向前探索,如此反复进行,直到得到解或证明无解为止。
第九章日治時期的台灣(下).
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
第 5 章 流程控制 (一): 條件分支.
Chapter 4 流程控制.
第二章 JAVA语言基础.
申請土地徵收注意事項 內政部地政司 邱于蓉.
新世代計算機概論 第14章 程式語言.
第 二 课 程序组成、基本数据类型、表达式 我们以上一章练习题为例说明Pascal程序的结构形式:
一、单选题 1、 字符串“ababacbab”和字符串“abcba”的最长公共子串是( )。
BLANK overview.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第二章 C# 基础知识.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
解题报告 刘非.
第五章 shell 编程 shell 编程的基本过程分为三步: 1. 建立 shell 文件 包含任意多行操作系统命令或shell命令的文本
第四章 程序设计初步 顺序结构:赋值语句、输出语句
本單元介紹何謂變數,及說明變數的宣告方式。
JAVA程序设计 第5章 深入理解JAVA语言----补充.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
编译原理课程设计.
第4章 程序控制结构与算法基础.
人生哲理 每一句話都充滿著智慧,值得和朋友們分享、共勉~ <每隔 6 秒,自動換頁 !!>
PHP 程式流程控制結構.
Chapter 2 Basic Elements of Fortran
程式語言Visual Basic 傳址與傳值
變數命名 保留字(Reserved Word)
编译原理实践 5.给定语法的语法分析程序构造.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
第12章 shell编程基础 本章主要介绍shell编程的基础知识。shell脚本的执行类似于Linux下的任何其他命令,脚本可以包含复杂的逻辑,也可以包含一系列Linux命令行指令。在一个shell程序内可以运行其他shell脚本。通过本章的学习,读者可以学到如何使用bash(最流行的Linux.
Java程序设计 第2章 基本数据类型及操作.
Lok Sin Tong Leung Kau Kui college
第三章 C# 基础知识.
第二章 词法分析4 词法分析程序实现 构造词法分析器步骤 单词的形式化描述 词法分析程序的实现.
第二章Java基本程序设计.
小结 郭清溥.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
第二章、第三章错题分析.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
第二章 Java基本语法 讲师:复凡.
第3章 JavaScript基本语句.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
現代專案管理教材 第一章 專案與專案管理 博碩文化出版發行.
中五級電腦科 PASCAL檔案處理.
编译原理课程设计 2017年4月.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
本节内容 指针类型.
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
第二章 Java基本语法 讲师:复凡.
四 选择结构程序设计 厦大附中信息技术.
三 顺序结构程序设计 厦大附中信息技术.
變數、資料型態、運算子.
第2章 Java语言基础.
计算机问题求解 – 论题 基本的数据结构 2018年05月09日.
第二章 Java基础语法 北京传智播客教育
PASCAL语言 吉林大学计算机科学与技术学院.
陳維魁 博士 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 儒林圖書公司.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
解题报告 七(5)班 严崟杰 03:20.
编译原理与实现 河北科技大学 信息科学与工程学院计算机系 杨奎河
Presentation transcript:

編譯程式設計 期末專題說明 V1.1 May 2004

專題目標 實作一個可用的編譯器 編譯指定的程式語言並產生C-- 編譯器與產生的執行檔必須可以在 Linux 或 FreeBSD 作業系統下執行

程式語言 命令式語言 使用保留字(reserve word) 由最簡單到最難共分為三個階段 做不夠嗎? 基本功能, 進階功能, 完整功能 依完成度作為評分依據 做不夠嗎? 額外功能

基本語法 序述以換行符號作為結尾 標記(token)間可以有一個或多個空白 符號‘#’開始到行尾為註解 program 主程式區塊 序述以換行符號作為結尾 標記(token)間可以有一個或多個空白 空白含, space, \t, \r 換行符號\n只能出現在序述的最後面, 但序述和序述間或檔頭檔尾可以有一個或以上的換行符號 符號‘#’開始到行尾為註解 程式由 program 宣告開始, 後接一主程式區塊 大小寫視為不同 (case sensitive)

程式區塊 程式區塊 空序述 一行序述; 或 由begin和end所包圍的一行或以上的序述 使用分號‘;’做為空序述 允許巣狀結構 空序述 使用分號‘;’做為空序述 空序述為一不做任何動作的序述

基本功能 (1/5) 變數宣告 接在 program 宣告之後,程式區塊之前,可有可無 變數宣告區段以 var 開頭,其後可以有一行或多行 int 變數1, 變數2, ... 變數宣告 接在 program 宣告之後,程式區塊之前,可有可無 變數宣告區段以 var 開頭,其後可以有一行或多行 每一行開頭為變數型態, 基本功能只需支援 int int 是32位元有號整數 可宣告一個或多個變數,以逗號分開 變數名稱最長不會超過 255 個字元 變數名稱可以是英文字母大小寫,數字或是底線,但是開頭不可以是數字

基本功能 (2/5) 變數值設定 運算式 運算元:= 為指定變數 左邊為變數, 右邊為運算式 基本整數四則運算 x := 1 y := 2 z := (x + y) * (x – y) # z 的值為 -3 變數值設定 運算元:= 為指定變數 左邊為變數, 右邊為運算式 運算式 基本整數四則運算 提供 +, -, *, /, mod, ( ), -(負號)

基本功能 (3/5) 整數的輸入與輸出 呼叫 read() 可以由鍵盤輸入一整數並傳回 呼叫 writestr(str)輸出一字串 x := read() writestr(“the answer is “) write( 運算式 ) writeln() 整數的輸入與輸出 呼叫 read() 可以由鍵盤輸入一整數並傳回 呼叫 writestr(str)輸出一字串 字串為一用兩個雙引號所包函的字元, 其中不可有換行符號或雙引號 呼叫 write(x) 將 x 的內容以十進位方式輸出到螢幕上,並在最後附加一空白字元 呼叫 writeln() 輸出換行符號到螢幕上

基本功能 (4/5) 比較運算 布林運算 運算式零值為假,非零值為真 提供 >, >=, <, <=, = (x >= y) and not (x <= z) 比較運算 提供 >, >=, <, <=, = 布林運算 提供 and, or, not 如果 and 左邊運算元為 false, 則右邊不去計算 如果 or 左邊運算元為 true, 則右邊不去計算 運算式零值為假,非零值為真

基本功能 (5/5) if-then-else while 迴圈控制 兩者皆允許巢狀結構 else的部份可有可無 while ( 運算式 ) 程式區塊 if ( 運算式 ) then else # 這部份可有可無 程式區塊 # fi if-then-else else的部份可有可無 while 迴圈控制 兩者皆允許巢狀結構

基本功能的程式範例 # # 基本功能範例 program var int i, result, x begin x := read() while(i <= x) result := result + i i := i + 1 end write(result) writeln() while(1) # 無窮迴圈 ; #

進階功能 (1/2) 整數陣列 宣告長度為一編譯時即可決定之常數運算式, 例如1+1 索引值從0開始 用方括號定址 var int 變數[長度] length(陣列變數) 整數陣列 宣告長度為一編譯時即可決定之常數運算式, 例如1+1 索引值從0開始 用方括號定址 編譯時與程式執行時都必須能夠偵測陣列索引值是否超過範圍,並印出錯誤訊息(並停止程式執行) 允許陣列拷貝,複製整個陣列的內容,如果來源陣列比目的陣列大的話則印出錯誤訊息 提供 length() 函式取得陣列的元素個數

進階功能 (2/2) for迴圈 foreach迴圈 i 是一個宣告過的變數 m 和 n 是兩個運算式, n 可以比 m 小, 大, 或相等 for i = m to n 程式區塊 foreach i in a 程式區塊 for迴圈 i 是一個宣告過的變數 m 和 n 是兩個運算式, n 可以比 m 小, 大, 或相等 foreach迴圈 a是一個陣列變數 在程式區塊中, i的值是a[0], a[1], a[2], … 改變 i 不會影響到原來陣列中的值

進階功能的程式範例 # # 進階功能 program var int a[2], i begin a[0] := read() for i = 0 to length(a) – 1 writestr(“a[ “) write(i) writestr(“] is “) write(a[i]) writeln() end

完整功能 函式宣告 宣告在全域變數之後,主程式區塊之前 函式名稱和變數名稱可重複 不需支援forward reference 允許遞迴呼叫 sub 函式名稱(int 參數1, int 參數2, ...) var int 區域變數1, 區域變數2, ... 程式區塊 函式宣告 宣告在全域變數之後,主程式區塊之前 函式名稱和變數名稱可重複 不需支援forward reference 允許遞迴呼叫 Call by Value 參數只需支援整數型態, 不需支援陣列參數

完整功能的程式範例 # # 完整功能 program # 全域變數 var int x # 函式宣告 sub hello() begin write(x) writeln() end # 底下是主程式 x := 1234 hello()

額外功能1 動態陣列 宣告時不指定陣列長度 預設長度為零 若在foreach中改變陣列長度, 則結果未定義 var int 變數[]... setlength(變數, 長度) 動態陣列 宣告時不指定陣列長度 預設長度為零 若在foreach中改變陣列長度, 則結果未定義 程式中可以用setlength(x,len)來指定陣列 x 的長度為len

額外功能2 多維陣列 不限維數的多維陣列 不需支援foreach, length()等功能 var int 變數[第一維長度][第二維長度]... 多維陣列 不限維數的多維陣列 不需支援foreach, length()等功能

額外功能3 動態多維陣列 不限維數的多維陣列 函式 setlength 的參數個數視該陣列維數而定 var int 變數[][] ...

額外功能4 其他長度整數資料型態 提供short: 16位元有號整數 提供byte: 8位元有號整數 var short 變數 ... byte 變數 ... 其他長度整數資料型態 提供short: 16位元有號整數 提供byte: 8位元有號整數 整數型態間可以互相轉換,但是會受到表示範圍的影響 當表示位元不足時, 取低位元部份

額外功能5 Call by Reference 在宣告函式的參數名稱前加上&表示該參數是reference sub 函式名稱(int &參數1, ...) Call by Reference 在宣告函式的參數名稱前加上&表示該參數是reference Reference的值會被函式所更動

額外功能6 自訂結構 宣告在program之後, 全域變數之前 型態名可以和變數及函式名重複 用 . 來指定結構的成員 type 自定型態名 int a int b ... epyt var.a := 1 自訂結構 宣告在program之後, 全域變數之前 型態名可以和變數及函式名重複 用 . 來指定結構的成員

額外功能7 多型 同名的函式可以有不同的參數 按照呼叫時的參數決定所呼叫的函式 sub function(int 變數1) sub function(int 變數1, int 變數2) 多型 同名的函式可以有不同的參數 按照呼叫時的參數決定所呼叫的函式

額外功能8 例外處理 使用 throw 函式丟出一個例外, 例外的資料型態為 int i是一宣告過的int變數, 存放例外的值 try 程式區塊1 catch(i) 程式區塊2 throw(-1) 例外處理 使用 throw 函式丟出一個例外, 例外的資料型態為 int i是一宣告過的int變數, 存放例外的值 丟出的例外會延著函式呼叫的堆疊往上層跑, 直到被try catch抓到 如果在程式區塊1中發生例外, 則程式流程跳到區塊2, 區塊1中剩下的程式碼不被執行 如果區塊1中外發生任何例外, 則區塊2不會被執行 存取陣列的索引超出範圍時也會產生例外, 其例外值為-1 除零錯誤也會產生例外, 其例外值為-2

附錄 - 保留字 保留字不可以用作變數或函式名稱 and, begin, byte, catch, char, do, else, end, epyt, fi, for, foreach, if, in, int, mod, not, or, program, short, sub, then, to, try, type, var, while

附錄 - 運算元結合優先順序 優先順序由上到下遞減,結合方向由左至右 ( ) [ ] not, -(負號) * / mod + - < <= > >= = and or

感謝 感謝蕭睆文同學協助更新 v1.1