第一篇:1機(jī)械原理課程設(shè)計(jì)說明
機(jī)械原理課程設(shè)計(jì)說明 機(jī)械原理課程設(shè)計(jì)的主要目的是為學(xué)生在完成課堂教學(xué)基本內(nèi)容后提供一個(gè)較完整的從事機(jī)械設(shè)計(jì)初步實(shí)踐的機(jī)會(huì)。要求學(xué)生能在短時(shí)間內(nèi),將所學(xué)的機(jī)械基礎(chǔ)理論運(yùn)用于一個(gè)簡單的機(jī)械系統(tǒng),通過機(jī)械傳動(dòng)方案總體設(shè)計(jì),機(jī)構(gòu)分析和綜合,進(jìn)一步鞏固掌握課堂教學(xué)知識(shí),并結(jié)合實(shí)際得到工程設(shè)計(jì)方面的初步訓(xùn)練,培養(yǎng)學(xué)生綜合運(yùn)用技術(shù)資料,提高繪圖、運(yùn)算的能力。同時(shí),注重學(xué)生創(chuàng)新意識(shí)的開發(fā)。
希望大家提高認(rèn)識(shí),端正態(tài)度,按照課程設(shè)計(jì)的相關(guān)要求,嚴(yán)格執(zhí)行、踏實(shí)完成?,F(xiàn)將相關(guān)事宜說明如下:
1.課程設(shè)計(jì)設(shè)計(jì)選題見課程設(shè)計(jì)任務(wù)書。
2.設(shè)計(jì)課題共14題,每5人一組,按照學(xué)號(hào)順序排列,如學(xué)號(hào)1、2、3、4、5,完成任務(wù)書中的任務(wù)書(1)中的設(shè)計(jì)題目。另學(xué)號(hào)71,72完成(1),(2)設(shè)計(jì)題目。
3.課程設(shè)計(jì)具體內(nèi)容要求見設(shè)計(jì)任務(wù)書。按照任務(wù)書的要求完成相關(guān)圖紙、說明書(設(shè)計(jì)說明書不少于20頁,統(tǒng)一使用A4白紙,手寫,不得使用電子版)。
4.課程設(shè)計(jì)的最終成績按照課程成績?cè)u(píng)分表的相關(guān)標(biāo)準(zhǔn)評(píng)定。
5.時(shí)間安排:18周-19周為課程設(shè)計(jì)時(shí)間;上交截止時(shí)間19周周日(6月23日);答辯采取自愿原則,20周按照擬答辯人數(shù)安排答辯時(shí)間。
6.最終上交材料:
(1)圖紙(按照任務(wù)書要求完成)。
(2)設(shè)計(jì)任務(wù)書(裝訂順序:設(shè)計(jì)說明書封頁→設(shè)計(jì)說明書正文→湖北文理學(xué)院理工學(xué)院機(jī)械與汽車工程系課程設(shè)計(jì)評(píng)分標(biāo)準(zhǔn)(封底))。
7.參考資料:機(jī)械原理課程教材;機(jī)械原理課程設(shè)計(jì)手冊(cè)等。
8.課程設(shè)計(jì)指導(dǎo)時(shí)間安排:臨近考試,指導(dǎo)不安排集體時(shí)間,以小組為單位和老師聯(lián)系具體指導(dǎo)時(shí)間。
另:最終課程設(shè)計(jì)材料上交以班級(jí)為單位,學(xué)委負(fù)責(zé)收集,整理好(按學(xué)號(hào)排列,小號(hào)在上)一起上交。
指導(dǎo)老師:余晶晶2012/6/7
第二篇:《編譯原理》課程設(shè)計(jì)說明-第1次
《編譯原理》課程設(shè)計(jì)
《編譯原理》課程設(shè)計(jì)
1.要求
完成一個(gè)簡化C語言——TINY C語言的編譯程序,最終能為用TINY C語言編寫的源程序(后綴為.tny,已給sample.tny,用一般的文本編輯程序即可打開)生成目標(biāo)代碼,并在給定的虛擬機(jī)TM上運(yùn)行得到運(yùn)行結(jié)果。
TINY C語言中允許出現(xiàn)的字詞: ? 整數(shù)、標(biāo)識(shí)符;
? 算術(shù)運(yùn)算符/關(guān)系運(yùn)算符/賦值運(yùn)算符/界符:+、-、*、/、=、<、:=、;、{、}、(、)? 其它保留字:IF THEN ELSE END REPEAT UNTIL READ WRITE TINY C語言中允許出現(xiàn)的語法單位
? 表達(dá)式:簡單整型算術(shù)表達(dá)式、關(guān)系表達(dá)式 ? 語句:
? 條件語句(IF THEN ELSE END)? 循環(huán)語句(REPEAT UNTIL)? 賦值語句(:=)? 讀寫語句(READ WRITE)? { }中可以有注釋,但不能嵌套
2.步驟
1)、詞法分析
2)、語法分析
3)、語義分析
4)、生成目標(biāo)代碼
3.源碼構(gòu)成
? MAIN.C 主程序
? GLOBALS.H 全局類型及變量(如Token類屬及語法樹結(jié)點(diǎn)的組成)? UTIL.H、UTIL.C 各步驟的實(shí)用函數(shù)。如輸出Token,生成語法樹結(jié)點(diǎn)等 ? SCAN.C、SCAN.H 詞法分析程序及其頭文件 ? PARSE.C、PARSE.H 語法分析程序及其頭文件 ? ANALYZE.C、ANALYZE.H 語義檢查程序及其頭文件 ? SYMTAB.C、SYMTAB.H 符號(hào)表生成程序及其頭文件
? CGEN.H、CGEN.C、CODE.C、CODE.H 目標(biāo)代碼生成程序及其頭文件
《編譯原理》課程設(shè)計(jì)
? TM 編譯sample.tny源程序后得到目標(biāo)代碼,在該虛擬機(jī)上運(yùn)行得到結(jié)果
步驟1——詞法分析
要求:填寫getToken()函數(shù),完成詞法分析器scan.c。約定:
? 僅允許整數(shù)類型,不允許實(shí)數(shù)類型
? 標(biāo)識(shí)符由大小寫英文字母組成,最多52個(gè)。其識(shí)別按最長匹配原則 ? 整數(shù)后緊跟非數(shù)字,或標(biāo)識(shí)符后緊跟非字母認(rèn)為是一個(gè)新Token開始 ? 由{ }括起來符號(hào)串都認(rèn)為是注釋部分,該部分在詞法分析時(shí)被過濾掉
? 識(shí)別出的Token由兩個(gè)變量:currentToken,tokenString識(shí)別,其中currentToken代表Token的類屬,為一個(gè)名為TokenType的枚舉類型,在文件globals.h中定義;tokenString代表Token在程序中出現(xiàn)的形式,即其本來面目。例如整數(shù)10的currentToken值為NUM,而tokenString值為‘10’;標(biāo)識(shí)符i的currentToken值為ID,而tokenString值為‘i’
typedef enum
{ ENDFILE,ERROR,IF,THEN,ELSE,END,REPEAT,UNTIL,READ,WRITE,/* 保留字 */
ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI :=
= <
+
*
/
()
;
} TokenType;
畫識(shí)別符合TINY C語言構(gòu)詞規(guī)則的DFA。然后用直接編碼的方法構(gòu)造詞法分析器
/****************************************************/ /* File: scan.c
*/ /* The scanner implementation for the TINY compiler
*/ /****************************************************/ #include “globals.h”
#include “util.h”
#include “scan.h”
typedef enum
{ START, INASSIGN, INCOMMENT, INNUM, INID, DONE } StateType;
《編譯原理》課程設(shè)計(jì)
char tokenString[MAXTOKENLEN+1];static int getNextChar(void)
//獲得下一字符 {實(shí)現(xiàn)請(qǐng)自己看scan.c文件} static void ungetNextChar(void)
//用于回吐字符 {實(shí)現(xiàn)請(qǐng)自己看scan.c文件}
static struct
{ char* str;
TokenType tok;
} reservedWords[MAXRESERVED]
= {{“if”,IF},{“then”,THEN},{“else”,ELSE},{“end”,END},{“repeat”,REPEAT},{“until”,UNTIL},{“read”,READ},{“write”,WRITE}};
//定義保留字表
static TokenType reservedLookup(char * s)
//進(jìn)行保留字的匹配 {實(shí)現(xiàn)請(qǐng)自己看scan.c文件}
/**********************************************/ /* the primary function of the scanner
*/ /* function getToken returns the next token in source file */ /**********************************************/ TokenType getToken(void){ int tokenStringIndex = 0;
TokenType currentToken;
//保存被識(shí)別Token的類屬
StateType state = START;
//初始狀態(tài)為START
int save;
//標(biāo)識(shí)當(dāng)前字符是否保存,如空格,換行符n、TAB符t及注釋中的任何字符
while(state!= DONE)
//DONE狀態(tài)表示已識(shí)別出一個(gè)Token
{ int c = getNextChar();
save = TRUE;
switch(state)
{ case START:
if(isdigit(c))
state = INNUM;
else if …… //此處請(qǐng)自己填寫(字符、:、空格/tab/換行、{、算符及界符等)
break;
case INCOMMENT:
…//此處請(qǐng)自己填寫,僅出現(xiàn)‘}’或EOF(注釋未完結(jié)束程序)時(shí)才改變狀態(tài)。
break;
case INASSIGN: …… //此處請(qǐng)自己填寫,‘=’或其它(出現(xiàn)錯(cuò)誤)
《編譯原理》課程設(shè)計(jì)
break;
case INNUM:
if(!isdigit(c))
{ /* backup in the input */
ungetNextChar();
save = FALSE;
state = DONE;
currentToken = NUM;
}
break;
case INID:
…… //此處請(qǐng)自己填寫,不是字符則回吐,并進(jìn)入DONE,且識(shí)別出一個(gè)ID
break;
case DONE: //不可能到
default: /* should never happen */
fprintf(listing,“Scanner Bug: state= %dn”,state);
state = DONE;
currentToken = ERROR;
break;
}
if((save)&&(tokenStringIndex <= MAXTOKENLEN))
tokenString[tokenStringIndex++] =(char)c;
if(state == DONE)
{ tokenString[tokenStringIndex] = '