9 Ngon Ngu Lap Trinh

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

MODULE 9.

NGN NG LP TRNH V CHNG TRNH DCH


9.1. Cc mc khc nhau ca ngn ng lp trnh
Trong mc 7, ta xem xt mt s phng php din t thut ton. cho my tnh c th thc hin c thut ton, cn phi vit thut ton di dng cc dng "lnh" theo cc quy c no m my tnh c th thc hin c mt cch trc tip hoc vit di dng no c th sinh t ng dng m my tnh c th thc hin trc tip. Tp cc k hiu v cc quy tc vit cc lnh th hin thut ton c gi l mt ngn ng lp trnh (programming language). Cc quy tc vit chng trnh c gi l c php (syntax) ca ngn ng lp trnh. Mi chng trnh s mang mt ngha nht nh m ta gi l ng ngha (semantic) ca chng trnh. C nhiu lp ngn ng lp trnh khc nhau. Theo mc hnh thc ho, ngi ta chia cc ngn ng lp trnh thnh cc lp sau: Ngn ng my. Chng trnh trong ngn ng my l dy cc lnh my m CPU c th thc hin trc tip. l ngn ng lp trnh duy nht m my tnh "hiu c". Trong thang bc cc ngn ng giao tip vi my tnh, y l mc thp nht nhng hiu qu ca chng trnh s l cao nht v ta c th khai thc trit kh nng ca my. Tu theo thit k v phn cng, mi loi my tnh c mt ngn ng my khc nhau. Cc lnh vit bng ngn ng my ni chung dng nh phn hoc bin th ca chng trong h m 16. V d sau y l mt on chng trnh vit bng ngn ng my ca mt my tnh dng b vi x l Intel 8086. Bng 9.1. Ngn ng my
M trn h nh phn 1001 0001 0110 0100 0001 0000 0000 0011 0110 0110 0001 0000 1010 0011 0000 0000 0010 1011 M h 16 A1 64 10 03 65 10 A3 00 2B ngha Np s 2 byte t 1064 ln AX Cng AX vi s 2 byte 1066 kt qu trn AX Chuyn kt qu t AX v hai byte bt u t 2B00

on chng trnh ny cng hai s nguyn hai byte trong cc a ch 1064 v 1066. Kt qu hai byte bt u t a ch 2B00. Ct u l dng lnh trong h 16, ct gia l dng lnh tng ng trong h nh phn (chnh l hnh nh thc s ca chng trnh trong b nh) v ct bn phi l gii thch. AX l tn mt thanh ghi 16 bt trong b vi x l 8086 . Qua v d trn, ta thy ngn ng my khng tht thch hp cho s ng ngi s dng my tnh v vit hoc hiu chng trnh, ngi ta phi nh rt my mc cc m s ca lnh m cc dng s ny khng c hm r rng. Mt khc do tp lnh ca cc b x l c th khc nhau nn khng th dng chng trnh vit trn b x l ny chy trn my tnh dng b x l khc loi. Hp ng (Assembly). khc phc nhc im trn ca ngn ng my, ngi ta xut mt ngn ng giao tip vi my mc hnh thc hn gi l hp ng. V c bn, hp ng c cc cu trc rt ging vi ngn ng my. iu khc l trong hp ng c

th vit lnh di dng m ch. M ch th hin m lnh hoc cc i tng trong lnh (trong ngn ng my n l m lnh v a ch ca i tng). M lnh dng ch thng chnh l nhng t trong ting Anh c ngha r rng, cn i tng do ta t t tn ph hp vi nim v i tng . V d nu on chng trnh trn dng cng chiu di v chiu rng ca hnh ch nht tnh na chu vi th trong hp ng ASM ta ch cn vit Bng 9.2. Chng trnh vit trn Assembly MOV AX CHIEU_DAI ADD AX CHIEU_RONG MOV NUA_CHU_VI AX T MOV c gc t t MOVE trong ting Anh, c ngha l chuyn, cn t ADD c ngha l cng. Lnh th nht c ngha l np s liu m ta t tn l CHIEU_DAI ln thanh ghi AX, lnh th hai c ngha l cng s trong thanh ghi AX vi s liu m ta t tn l CHIEU_RONG. Ta thy mc d cn cng knh v cn ph thuc vo mt loi my tnh c th, hp ng d dng hn rt nhiu so vi ngn ng my. mt chng trnh vit bng hp ng chy c trn my tnh, n cn phi c dch ra ngn ng my. R rng l, mi hp ng dng cho mt loi my no u cn c trnh dch ph hp. Khi dch, hai i tng CHIEU_DAI v CHIEU_RONG ni trn s c t ng thay bng hai a ch c th no khng nht thit l 1064 v 1066 nh v d trn. V vy ta cng khng cn phi quan tm n sp xp a ch c th sau khi dch xong v chy chng trnh. Chng trnh dch i vi hp ng c gi l hp dch (assembler). Ngn ng thut ton (cn gi l ngn ng thut ton) . Ta thy ngn ng my v c hp ng u ph thuc vo h thng lnh ca mt loi my c th. Chng cha tht thch hp cho ng o ngi s dng my tnh. Ngi ta mun th hin thut ton bng nhng lnh vi ngha thc t v c lp vi bt c loi my c th no. Chng hn trong v d trn ch cn vit NUA_CHU_VI = CHIEU_DAI + CHIEU_RONG l . T u nhng nm 50, ngi ta xy dng nhng ngn ng lp trnh vn nng c cc lnh gn vi ngn ng t nhin v ngn ng ton hc. Cc ngn ng lp trnh ny c gi l cc ngn ng lp trnh bc cao (high level programming language). V chng ch nhm vo th hin thut ton c lp vi cc my tnh c th nn ngi ta cn gi n l cc ngn ng thut ton (algorithmic language). Cng nh i vi hp ng, mi ngn ng lp trnh bc cao trn mt loi my c th u cn c chng trnh dch dch cc chng trnh sang sang ngn ng my ca my mi c th thc hin c. Ch rng mi lnh ca hp ng ni chung c dch thnh mt lnh trong ngn ng my cn mi lnh ca ngn ng bc cao thng tng ng vi nhiu lnh my. V d lnh NUA_CHU_VI = CHIEU_DAI + CHIEU_RONG s dch thnh 3 lnh my. C hai kiu dch: thng dch (Interpeter) l kiu dch tng lnh hiu cng vic phi lm v thc hin lun nhng khng nht thit phi to ra nhng on m tng ng trong ngn ng my. Nu mt lnh cn thc hin nhiu ln th cng phi dch nhiu ln.

Ngn ng BASIC thnh hnh vo nhng nm 80 thng i theo ch thng dch. Cn cc trnh bin dch (compiler) s dch ton b chng trnh ban u (gi l chng trnh ngun) thnh mt chng trnh tng ng trong ngn ng my (gi l chng trnh ch), sau np chng trnh ch vo my tnh thc hin. S d trong ting Vit chng ta gi hai kiu dch ny l "thng dch' v "bin dch" v tnh cht dch c phn no ging vi dch ting nc ngoi. Thng dch ging nh cng vic ca ngi phin dch (thng ngn), ni ti u dch ti . Cn bin dch l cng vic ca ngi bin dch, cn c trn ti liu y , ta vit ra mt ln bn dch y . Ngn ng bc cao u tin c xy dng vo nm 1957 l ngn ng FORTRAN (FORmula TRANslator - B dch cc cng thc). Ngy nay c rt nhiu cc ngn ng lp trnh bc cao nh PASCAL hay C. Sau y l mt on chng trnh gii phng trnh bc 2 vit trn PASCAL v FORTRAN. Bn c d cha c mt cht nim g v cc ngn ng ny cng c th hiu c cc on chng trnh sau ni g Bng 9.3. Chng trnh vit trn Pascal (*on chng trnh trn PASCAL*) DELTA := B*B - 4*A*C; IF DELTA > 0 THEN BEGIN X1 := (- B + SQRT(DELTA))/(2*A); X2 := (- B - SQRT(DELTA))/(2*A); WRITE (X1,X2); END ELSE WRITE('Vo nghiem'); ..... Sau y l on chng trnh vit trn ngn ng FORTRAN. Theo quy c, chng trnh FORTRAN c vit trn giy mu c 80 ct. T ct 1 n ct 5 dnh cho nhn cc ton t, t ct 7 n 72 dnh cho ton t. Cc lnh in phi i km vi thng tin v cch in (v d knh 3 ni my in v nhn ca mt ton t FORMAT gii thch cch in, v d F8.3 l in mt s thc 8 v tr trong dnh cho phn l sau du phy 3 v tr). Bng 9.4. Chng trnh vit trn FORTRAN IV

6 7 72
DELTA = B*B - 4* A*C IF DELTA < 0 GOTO 10 X1 = (- B + SQRT(DELTA))/(2*A)

73 80

X2 = (- B - SQRT(DELTA))/(2*A) WRITE (3,20) X1, X2

20 10 40 30

FORMAT ('NGHIEM 1= ', F8.3, NGHIEM 2 = ', F8.3) GOTO 30 WRITE(3,40) FORMAT('VO NGHIEM') ...........................................

Qua cc v d trn ta thy ngn ng thut ton d s dng hn nhiu so vi hp ng v ngn ng my. Ngy nay rt t ngi phi s dng hp ng v ngn ng my pht trin phn mm.

9.2. Qu trnh thc hin mt chng trnh vi ngn ng bc cao


Cn nhc li rng MTT ch lm vic trc tip vi ngn ng my. Vic dch mt chng trnh vit bng ngn ng bc cao sang ngn ng my do mt chng trnh dch (compiler) thc hin. Chng trnh dch chnh l mt loi phn mm thuc lp cng c m chng ta tho lun trong mc 7. Qu trnh to ra mt chng trnh thc hin c bao gm nhng bc sau: Son tho chng trnh ngun. C th dng cc phn mm son tho vn bn to ra vn bn chng trnh ngun. Phn tch t vng (Lexical Analysis) v phn tch c php (Syntax Analysis). Phn tch t vng xy dng danh sch cc i tng ca chng trnh. Phn tch c php c mc ch duyt chng trnh ngun pht hin v thng bo cc li khng ng vi quy c ca ngn ng. Cc li ny lm cho ngha ca chng trnh khng r v do khng th dch ng c. V d trong ngn ng PASCAL ta vit dng lnh d := (a + b)/e-f)+g. Khi c n du ngoc ng th 2 sau f, ta s khng hiu c ngui vit mun tnh g v ng nhin cng khng th dch c. L do lm cho dng lnh khng r ngha y l thiu mt du ngoc "(" pha trc, c th l trc ch e, cng c th trc ch a. Nhng li sai vi quy c ca ngn ng gi l li c php. Qu trnh phn tch c php cng to ra cc thng tin cn thit v cu trc ca chng trnh v cc i tng s dng trong cng vic dch c m ta tip theo y. Trong qu trnh phn tch c php, danh mc cc i tng cng c xy dng cn sinh m chng trnh trong giai on tip theo. Cng vic ny gi l phn tch t vng. Dch (Compile). Nu chng trnh ngun khng c li c php th vic dch ra lnh my mi c th tin hnh c. Thng thng vic phn tch c php v dch thng tin hnh xen k. Kt qu sau giai on dch l nhng on chng trnh gi l m un i tng (object module). Ni chung cc m un i tng cha hon chnh c th thi hnh c. Sau khi dch c th ti u m. Mt on chng trnh sau khi dch c th chuyn ti c cc ca thut gii nhng cha c i u. Cng on ti u ho c th gip to ra cc m hiu qu hn. Lin kt (Link). Trn thc t, mt chng trnh c th c nhiu phn c dch

mt cch c lp. Ngoi ra rt nhiu cng vic thng dng c lp trnh sn v c lu trong cc th vin di dng cc m un i tng. Ngi lp trnh ch cn vit yu cu s dng. V d trong PASCAL khi vit y := 3 + sin(x) th chnh on chng trnh tnh sin c lp sn t trc di dng mt m un i tng s c ghp vo chng trnh ch. Nh vy sau khi dch c mt chng trnh hon chnh cn phi lin kt cc cc m un i tng li vi nhau. Qu trnh ghp ni cc on chng trnh ca ngi s dng v cc on chng trnh khc c lp t trc gi l hp nht hoc lin kt (link). Qu trnh ny cng c th gp li v d khng tm thy cc on chng trnh c yu cu ni vo hoc cu trc kt ni khng ph hp, v d m un A thng bo chuyn cho m un B d liu l mt k t trong khi trong m un B li yu cu nhn mt s. Thc hin (run). Sau khi lin kt, ta c mt chng trnh c th sn sng thi hnh trn my. Trong qu trnh thi hnh trn my vn c th c li gi l li thi hnh (runtime error). Li thi hnh c th c nguyn nhn t thut ton , cng c th c nguyn nhn do ta khng th hin chnh xc ngha hoc khng kim sot c ng qu trnh sinh ra hoc bin i ca cc i tng. Cc li ny gi l li ng ngha (semantic). V d dng lnh trong ngn ng PASCAL a: = x/y ngha l a tnh bng thng ca x v y th khng sai c php nhng khi thc hin nu y l 0 th s gy li ng ngha. Li thi hnh cn c nguyn nhn l tnh trng x l c th ca my. V d chng trnh i in nhng my in khng bt in hoc ghi a nhng a b hng.

S thc hin mt cng vic s dng hp ng hoc ngn ng bc cao c minh ho trong hnh 9.1.
Ta thy rng cc b dch hay chng trnh lin kt chnh l mt loi phn mm pht trin

Son tho
Phn mm son tho

Dch
Chng trnh dch

Lin kt
Chng trnh lin kt

Thc hin

D liu

Chng trnh ngun

Cc m un i tng

Chng trnh chy c

Kt qu x l

Li c php

Li lin kt

Li thi hnh

Hnh 9.1. S thc thc hin mt cng vic vi ngn ng bc cao

You might also like