Lihtsa programmeerimiskeele süntaksi kirjeldus
Kaldkirjas read on kommentaarid, mis ei kuulu formaalsesse kirjeldusse!
Programm
Käsk
Programm
Käsk Programm
s.t. programm on kas üksainus käsk või käsk ja sellele järgnev samasuguse süntaksiga jada, s.t. käskude jada; edaspidi tähistatakse sellist konstruktsiooni lühendatult
programm
käsk | käsk programm
Käsk
Omistamine |Tingimuskäsk |Ttsükkel | Kirjutamine | Lugemine
Omistamine
Identifikaator = Avaldis
Identifikaator
Täht | Indentifikaator Täht_või_number
s.t. identifikaator algab tähega ja selle järel võib olla ükskõik kui palju tähti või numbreid
Avaldis
Identifikaator | Konstant| Identifikaator Operand Avaldis | (Avaldis)
s.t. avaldis on kas üksainus identifikaator või arvkonstant või identifikaator ja sellele järgnev (binaarne) operand ja (alam)avaldis; avaldis võib olla ka sulgudesse võetud (teine) avaldis
Konstant
Number | Number Konstant
Number
0| 1 | 2 | 3 | 4 5 6 | 7 | 8 | 9 | 0
Täht
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Konstandid on vaid täisarvud ja lubatud on vaid suurtähed!
Operand
+ | - | * | /
Operandid on vaid neli aritmeetilist tehet!
Tingimuskäsk
IF tingimus THEN programm ENDIF
Tingimus
Avaldis Tingimusop Avaldis
Tsükkel
STEP Omistamine UNTIL Avaldis DO Programm ENDSTEP
Tingimusop
= | /= | > | < | >= | <=
Kirjutamine
WRITE Identifikaator
Lugemine
READ Identifikaator
Lihtne on kontrollida, et järgnev programm (see arvutab N-da Fibonacci arvu F2) rahuldab selle keele süntaksireegleid:
READ N
F0 = 0
F1 = 1
STEP I FROM 2 to N
F2 = F0 + F1
F0 = F1
F1 = F2
ENDSTEP
WRITE F2
Ülesandeid:
1. Laienda ülaltoodud kirjeldust nii, et programmis oleks lubatud kasutada ka reaalarve (lubatud kirjaviisid: 3.14, .5, -2., 3.67E-12)
2. Laienda eespooltoodud kirjeldust nii, et IF-lauses võiks kasutada ka ELSE-osa (kuid tingimuslauset võiks kasutada ka ilma ELSE-osata ).
3. Laienda ülaltoodud kirjeldust nii, et programmis oleks lubatud kasutada ka
DO ... UNTIL ... ENDDO
WHILE ... DO ... ENDWHILE
4. Miks ülaltoodud näidetes kasutatakse kõigis liitkonstruktsioonides (IF..., STEP..., DO..., WHILE ...) igal konstruktsiooni lõpumärgendit (ENDIF, ENDSTEP, ENDDO, ENDWHILE), millised eelised see annab ?
Kui IF-lause (ELSE-osaga ) oleks ilma lõpumärgendita ENDIF, kas järgmine programmilõik oleks siis üheselt mõistetav (pange tähele, et eespool on reavahetust kasutatud vaid lugemise lihtsustamiseks, kusagil pole väidetud, et reavahets oleks programmilausete eraldaja!):
IF X > 0 THEN IF Y > X THEN Z = X + Y ELSE Z = Y / 2
5. Kas kõigis liitkonstruktsioonides võiks kasutada ühesugust lõpumärgendit?
6. Milliseid identifikaatoreid ja konstante lubab programmeerimiskeel Scheme süntaks?
Küsimused, probleemid:
jaak@cc.ttu.ee
Tagasi loengute sisukorra juurde