Spurningar Flashcards
Hvað er “mál”?
Mál er einfaldlega mengi strengja. Strengur er endanleg runa tákna úr einhverju
mengi, sem við þá köllum táknróf eða stafróf (alphabet) málsins.
BNF stendur fyrir ?
Backus-Naur Form, til heiðurs John Backus, sem fann upp FORTRAN forritunarmálið og Peter Naur, ritstjóri skilgreiningarinnar á ALGOL-60 forritunarmálinu
Hvað er BNF?
BNF er aðferð, svokallað meta-mál, til að skilgreina mál. Með BNF er í grundvallaratriðum átt við það sama og átt er við þegar talað er um samhengisfrjálsar mállýsingar
En BNF á sér einnig rætur í málvísindum, hver skilgreindi samhengisfrjálsar mállýsingar áður en Backus og Naur skilgreindu BNF?
Málvísindamaðurinn Noam Chomsky
útleiðsla?
Þegar gefin er BNF skilgreining eins og að ofan má yfirleitt leiða út ótakmarkaðan fjölda strengja í málinu
Mállýsing er margræð ef ?
Strenginn má leiða út á fleiri en einn hátt.
Málið er samhengisfrjálst ef?
Ef unnt er að lýsa tilteknu máli með BNF (þ.e. með samhengisfrjálsri mállýsingu)
Hvaða aðferðið eru notaðar til að lýsa málfræði forritunarmála ?
BNF, EBNF (Extended BNF) og málrit (syntax diagrams).
Regluleg mál (regular language).
Frumeiningar forritunarmála, svo sem lykilorð, strengfastar, heiltölufastar, fleytitölufastar, o.s.frv., eru yfirleitt regluleg mál (regular language).
Regluleg mál eru undirmengi samhengisfrjálsra mála, þ.e. ?
þ.e. öll regluleg mál eru samhengisfrjáls, en ekki öfugt.
Reglulegar segðir?
Ein aðferð til að skilgreina regluleg mál er reglulegar segðir
Endanlegar stöðuvélar ?
Enn ein aðferð til að skilgreina regluleg mál.
Hvernig er EBNF?
EBNF er svipað og BNF, en þar hefur verið bætt við hugmyndum úr reglulegum segðum.
BNF | ?
Eða
-> 0|1|2|3|4
digit getur breyst í 0 eða 1,2,3 eða 4
Nonterminals í BNF?
<>, Það sem er inn í getur breyst í eitthvað annað
Hvað inniheldur BNF ?
terminals, non-terminals og production reglur
Hvað þýðir ::= í BNF?
is defined by
Hvað er LHS í BNF?
left hand side, alltaf non-terminal
Hvað er RHS í BNF?
right hand side, terminals eða non-terminals
málrit
BNF myndrænt
Í endanlegum stöðuvélum eru lokastöður teiknaðar hvernig?
Með tvöföldum hring.
Að breyta endanlegri stöðuvél í málrit?
Kassar samsvara stikum í stöðuvélinni
Hvernig er lokatáknin merkt sérstaklega í EBNF?
Með því að setja gæsalappir utan um þau
Hvernig má tákna endurtekningar í EBNF?
Nota má slaufusviga til að tákna endurtekningar: {X} er látið standa fyrir núll eða fleiri X.
Hvernig má tákna einstakan valkost í EBNF ?
Nota má hornklofa til að tákna einstakan valkost: [X] er látið standa fyrir núll eða eitt X.
Hvernig má aðskilja valkosti eða safna saman?
Nota má sviga til að safna saman, og nota má | til að aðskilja valkosti: Til dæmis er (X | Y )Z jafngilt XZ | Y Z.
Samkeyting í EBNF?
Samskeyting í EBNF táknuð með aðgerðinni , (komma)
Í forritunarmálum eru eru notuð fjögur til fimm afbrigði viðfangaflutninga (parameter
passing), hver eru þau?
Gildisviðföng (call by value), Tilvísunarviðföng (call by reference), Afritsviðföng (call by value-result), Nafnviðföng (call by name), Löt viðföng (call by need, lazy evaluation).
Í Pascal og C++ eru notuð hvernig viðfangaflutningar?
gildisviðföng og tilvísunarviðföng.
Í C, Java, Scheme og CAML eru notuð hvernig viðfangaflutningar?
Aðeins gildisviðföng
Hvernig viðgangalfutningar eru notaðir í Morpho?
Í Morpho eru gildisviðföng og einnig er hægt að líkja eftir tilvísunarviðföngum, nafnviðföngum
og lötum viðföngum.
Hvernig viðgangalfutningar eru notaðir í Ödu?
Gildisviðföng, Tilvísunarviðföng , Afritsviðföng
Hvernig viðgangalfutningar eru notaðir í FORTRAN?
Bæði tilvísunarviðföng og afritsviðföng
Hvernig viðgangalfutningar eru notaðir í Algol?
Í Algol gamla voru gildisviðföng og nafnviðföng.
Hvernig viðgangalfutningar eru notaðir í Haskell?
Í Haskell eru löt viðföng.
Hvernig viðgangalfutningar eru notaðir í λ-reikningi?
Einnig má halda því fram að λ-reikningur, sem fundinn var upp löngu áður en tölvur urðu til, noti nafnviðföng eða löt viðföng.
Hvernig virkar gildisviðfang?
Gildisviðfang (call by value) er gildað (evaluated) áður en kallað er á viðkomandi stef, gildið sem út kemur er sett á viðeigandi stað inn í nýju vakningarfærsluna (activation
record) sem verður til við kallið.
Hvernig virkar Tilvísunarviðfang ?
Tilvísunarviðfang (call by reference), t.d. var viðfang í Pascal eða viðfang með &
í C++, verður að vera breyta eða ígildi breytu (t.d. stak í fylki). Það er ekki gildað
áður en kallað er heldur er vistfang breytunnar sett á viðeigandi stað í nýju vakningarfærsluna. Þegar viðfangið er notað inni í stefinu sem kallað er á er gengið beint í
viðkomandi minnissvæði, gegnum vistfangið sem sent var.
Hvernig virkar Afritsviðfang ?
Afritsviðfang (call by value/result, einnig kallað copy-in/copy-out) verður að vera breyta, eins og tilvísunarviðfang. Afritsviðfang er meðhöndlað eins og gildisviðfang, nema að þegar kalli lýkur er afritað til baka úr vakningarfærslunni aftur í breytuna.
Hvernig virkar Nafnviðföng ?
Nafnviðföng virka þannig að þegar kallað er á fall eða stef er ekki reiknað úr nafnviðföngunum áður en byrjað er að reikna inni í fallinu eða stefinu sem kallað er á, heldur er reiknað úr hverju viðfangi í hvert skipti sem það er notað.
Hvernig virkar Löt viðföng ?
Löt viðföng eru eins og nafnaviðföng,
nema hvað aðeins er reiknað einu sinni, í fyrsta skiptið sem viðfangið er notað.
Í Scheme viljum við forrita án hliðarverkana, hvað þýðir það?
Það þýðir að við viljum ekki nota neinar gildisveitingar. Breytur fá því gildi þegar þær verða til og fá aldrei nýtt gildi.
Hvað þurfum við að gera til þess að forrita án hliðarverkana í Scheme?
Við notum endurkvæmni (recursion) í stað lykkju.
Hvað gerir endurkvæmt fall?
Kallar á sjálft sig