Danh mục

Bài giảng Chương trình dịch: Bài giảng 7 - Nguyễn Phương Thái

Số trang: 20      Loại file: ppt      Dung lượng: 442.50 KB      Lượt xem: 10      Lượt tải: 0    
Thư viện của tui

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài 7 của bài giảng Chương trình dịch trang bị cho người học những kiến thức về phân tích ngữ nghĩa. Trong bài giảng này sẽ giới thiệu một số nội dung như: Biểu thức kiểu, hệ thống kiểu, luật ngữ nghĩa kiểm tra kiểu. Cùng tham khảo bài giảng để nắm bắt các nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Chương trình dịch: Bài giảng 7 - Nguyễn Phương Thái NguyễnPhươngTháiBộmônKhoahọcMáytínhhttp://www.coltech.vnu.vn/~thainp/Nội dungBiểuthứckiểuHệthốngkiểuLuậtngữnghĩakiểmtrakiểuGiới thiệuMôđunphântíchngữnghĩa:kiểmtratínhđúngđắnvề mặtngữnghĩacủachươngtrìnhnguồnViệckiểmtrađượcchialàmhailoại: kiểmtratĩnh kiểmtrađộng(kiểmtrađộngxảyralúcchươngtrìnhđích chạy)Trongbàigiảngnàytachỉxétmộtsốdạngcủakiểmtra tĩnhGiới thiệu (tiếp)kiểmtrakiểu:kiểmtravềtínhđúngđắncủacáckiểutoánhạng trongbiểuthức.kiểmtradòngđiềukhiển:mộtsốđiềukhiểnphảicócấutrúchợp lý,vídụnhưlệnhbreaktrongngônngữCphảinằmtrongmột vònglặp.kiểmtratínhnhấtquán:cónhữngngữcảnhmàtrongđómộtđối tượngđượcđịnhnghĩachỉđúngmộtlần.Vídụ,trongPascal,một tênphảiđượckhaibáoduynhất,cácnhãntronglệnhcasephải khácnhau,vàcácphầntửtrongkiểuvôhướngkhôngđượclặp lại.kiểmtraquanhệtên:Đôikhimộttênphảixuấthiệntừhailầntrở lên.Vídụ,trongAssembly,mộtchươngtrìnhconcómộttênmà chúngphảixuấthiệnởđầuvàcuốicủachươngtrìnhconnày.Biểu thức kiểuKiểucủamộtcấutrúcngônngữđượcbiểuthịbởi “biểuthứckiểu”Mộtbiểuthứckiểucóthểlà: mộtkiểucơbản kiểuhợpthành:đượcxâydựngtừcáckiểucơbảntheo mộtsốtoántửnàođóKiểu cơ bảnboolean,char,interger,realtype_error:mộtkiểucơbảnđặcbiệtdùngđểtrảvề mộtcấutrúcbịlỗikiểuvoid:mộtkiểucơbảnđặcbiệtkhác,biểuthịcáccấu trúckhôngcầnxácđịnhkiểunhưcâulệnhKiểu hợp thànhMảng.NếuTlàmộtbiểuthứckiểuthìarray(I,T)làmột biểuthứckiểuđốivớimộtmảngcácphầntửkiểuTvà Ilàtậpcácchỉsố. Vídụ,trongngônngữPascalkhaibáo: varA:array[1..10]ofinterger; sẽxácđịnhkiểucủaAlàarray(1..10,interger)Tíchcủabiểuthứckiểulàmộtbiểuthứckiểu.NếuT1 vàT2làcáckiểubiểuthứckiểuthìtíchĐềcáccủaT1xT2 làmộtbiểuthứckiểu.Kiểu hợp thành (tiếp)Bảnghi.Kiểucủamộtbảnghichínhlàbiểuthứckiểu đượcxâydựngtừcáckiểucủacáctrườnghợpcủanó.Vídụ(ngônngữPascal): typerow=record address:interger; lexeme:array[1..15]ofchar; end; vartable:array[1..101]ofrow; nhưvậymộtbiếncủarowthìtươngứngvớimộtbiểuthứckiểu là:record((addressxinterger)x(lexemexarray(1..15,char)))Kiểu hợp thành (tiếp)Contrỏ.GiảsửTlàmộtbiểuthứckiểuthìpointer(T)là mộtbiểuthịmộtbiểuthứckiểuxácđịnhkiểuchocon trỏcủamộtđốitượngkiểuT.Vídụ(ngônngữPascal): varp:^row thìpcókiểulàpointer(row)Kiểu hợp thành (tiếp)Hàm.Mộthàmlàmộtánhxạtừcácphầntửcủamột tậpvàomộttậpkhác.Nhưvậycóthểcoikiểumộthàm làánhxạtừmộtkiểumiềnDvàomộtkiểuphạmviR. Biểuthứckiểuchomộthàmnhưvậysẽđượckýhiệu làD>R.Vídụ(ngônngữPascal),mộthàmkhaibáonhưsau: functionf(a,b:interger):^interger; cókiểumiềnlàintergerxintergervàkiểuphạmvilà pointer(interger).Vànhưvậybiểuthứckiểuxácđịnh kiểuchohàmđólà: intergerxinterger>pointer(interger)Hệ thống kiểuHệthốngkiểu:làmộttậpcácluậtđểxácđịnhkiểucho cácphầntrongchươngtrìnhnguồnBộkiểmtrakiểu:làmnhiệmvụthựcthicácluậttrong hệthốngkiểuKỹthuật:cúphápđiềukhiểnvàlượcđồdịchMột số luật ngữ nghĩa kiểm trakiểuTasẽxétmộtsốvídụChúý: đốivớicâulệnhkhôngcógiátrị,tacóthểgánchonókiểu cơsởđặcbiệtvoid nếucólỗivềkiểuđượcpháthiệntrongcâulệnhthìta gánchonógiátrịkiểulàtype_errorPhần khai báo của chương trìnhD>id:TT>intergerT>charT>^TT>array[num]ofT Luậtcúpháp Luậtngữnghĩa D>id:T AddType(id.entry,T.type); D.type:=void T>char T.type:=char T>interger T.type:=interger T>^T1 T.type:=pointer(T1.type)T>array[num]ofT1 T.type:=array(num.val,T1.type)Biểu thứcS>id:=EE>E+EE>EmodEE>E1[E2]E>numE>idLuậtcúpháp Luậtngữnghĩa S>id:=E S.type:=ifid.type=E.typethenvoid elsetype_error; AddType(id.entry,E.type) E>E1+E2 E.type:= ifE1.type=intergerandE2.type=intergerthen interger elseifE1.type=intergerandE2.type=realthenreal elseifE1.type=realandE2.type=intergerthenreal elseifE1.type=realandE2.type=realthenreal elsetype_error E>num E.type:=interger E>id ...

Tài liệu được xem nhiều:

Tài liệu cùng danh mục:

Tài liệu mới: