Készíts egy értelmezőt a Forth egy nagyon egyszerű részhalmazához.
A Forth egy veremalapú programozási nyelv. Készíts egy nagyon egyszerű értelmezőt a Forth egy kis részhalmazához.
Az értelmeződnek a következő szavakat kell támogatnia:
+, -, *, / (egész számokkal végzett műveletek)DUP, DROP, SWAP, OVER (veremműveletek)Az értelmeződnek emellett támogatnia kell új szavak definiálását a szokásos szintaxissal: : word-name definition ;.
Hogy a dolog egyszerű maradjon, az egyetlen adattípus, amelyet támogatnod kell, az előjeles egész szám, méghozzá legalább 16 bites.
A szintaxishoz a következő szabályokat használd: egy szám egy vagy több (ASCII-)számjegyből álló sorozat, egy szó pedig egy vagy több olyan betűből, számjegyből, szimbólumból vagy írásjelből álló sorozat, amely nem szám. (A Forth valószínűleg kicsit más szabályokat használ, de ez így elég jó közelítés.)
A szavak nem tesznek különbséget kis- és nagybetű között.
Néha szükséges, hogy a kódodban kivételeket egyszerre testreszabj és raise-elj. Amikor ezt teszed, mindig adj meg egy jelentőségteljes hibaüzenetet, amely jelzi a hiba forrását. Ez olvashatóbbá teszi a kódodat, és jelentősen segít a hibakeresésben.
Egyéni kivételeket új kivételosztályok létrehozásával hozhatsz létre (a részletekért lásd: classes.) amelyek általában a Exception alosztályai.
Azokban az esetekben, amikor tudod, hogy a hiba forrása egy bizonyos kivételtípus származéka lesz, választhatsz, hogy az Exception osztály alatti built in error types egyikéből örökölsz. A hiba dobásakor akkor is adj meg egy jelentőségteljes üzenetet.
Ez a konkrét feladat megköveteli, hogy létrehozz egy egyéni kivételt, amelyet dobni/„kiváltani” kell, amikor a verem nincs kellően feltöltve. A tesztek csak akkor fognak sikeresen lefutni, ha testreszabod a megfelelő kivételt, raise-eled azt a kivételt, és megfelelő hibaüzeneteket adsz meg.
# subclassing the Exception to create a StackUnderflowError
class StackUnderflowError(Exception):
"""Exception raised when Stack is not full.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising a StackUnderflowError
raise StackUnderflowError("Insufficient number of items in stack")
Ezenkívül ez a feladat megköveteli, hogy több built-in exceptions-t dobj hibaüzenetekkel.
Ahhoz, hogy egy built-in exception-t üzenettel dobj, írd az üzenetet az exception típus argumentumaként:
# an example when division by zero is attempted.
raise ZeroDivisionError("divide by zero")
#an example when the operation is undefined.
raise ValueError("undefined operation")
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.