



Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
A course overview for CSE 110A: Winter 2020 at UC Santa Cruz. It covers the definition of a compiler, its history, and what students will learn in the course. The course requires familiarity with functional programming, datatypes, polymorphism, recursion, and some C programming and assembly. examples of well-known compilers and their key requirements. It could be useful as study notes or a summary for a student preparing for an exam or assignment in a compiler design course.
Typology: Study notes
1 / 5
This page cannot be seen from the preview
Don't miss anything!
Owen Arden UC Santa Cruz
Based on course materials developed by Ranjit Jhala
A function that maps an input string to an output string. compiler :: String -> String Typically, the input and output strings are “programs” compiler :: SourceProgram -> TargetProgram 2
For example, here are some well-known compilers gcc, ghc clang :::: CHaskell ->-> BinaryBinary -- a.out, .exe javac :: Java -> JvmByteCode -- .class scalac ocamlc :::: ScalaOcaml ->-> JvmByteCodeOcamlByteCode -- .cmo ocamlopt :: Ocaml -> Binary gwt :: Java -> JavaScript -- .js v8 nasm :::: JavaScriptX86 ->-> BinaryBinary pdftex :: LaTeX -> PDF pandoc :: Markdown -> PDF | Html | Doc Key Requirements on output program:
Compilers were invented to avoid writing machine code by hand 4 From Binary to FORTRAN
Richard Hamming – The Art of Doing Science and Engineering, p25: 5 In the beginning we programmed in absolute binary… Finally, a Symbolic Assembly Program was devised – after more years than you are apt to believe during which most programmers continued their heroic absolute binary programming. At the time [the assembler] first appeared I would guess about 1% of the older programmers were interested in it – using [assembly] was “sissy stuff”, and a real programmer would not stoop to wasting machine capacity to do the assembly.
John A.N. Lee, Dept of Computer Science, Virginia Polytechnical Institute One of von Neumann’s students at Princeton recalled that graduate students were being used to hand assemble programs into binary for their early machine. This student took time out to build an assembler, but when von Neumann found out about it he was very angry, saying that it was a waste of a valuable scientific computing instrument to use it to do clerical work.
General recipe, applies to any large system
- gradually, one feature at a time! We will - Step 1 Start with a teeny tiny language, - Step 2 Build a full compiler for it, - Step 3 Add a few features, - Go to Step 2. (Yes, loops forever, but we will hit Ctrl-C in 10 weeks…) 10
(30%) Assignments
Write a compiler for NanoML —> X But Rome wasn’t built in a day … and neither is any serious software. So we will write many compilers:
Core principles of compiler construction
This 110A uses many concepts from CSE 116