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