Compilers and Language Design Course at the University of Notre Dame
Written homework assignments should be submitted via Canvas.
Homework 1 should be a typed document and submitted as a PDF.
Homeworks 2-4 will require drawing out some complex graphs and examples via hand. Please write these out on paper, then snap pictures and submit to Canvas as either JPGs or PDF. Some of these graphs can get rather complicated, please take the time to draw (or re-draw) them clearly on a clean sheet of paper. It’s fine to start each problem on a new page.
Select a C or C++ program of your own
creation from a prior class. It doesn’t have to be very large,
but should consist of more than a few functions or methods.
Determine how to invoke the
different parts of the compiler (gcc
or g++
) in order
to create the various stages of the compiler pipeline.
Then, answer the following questions:
nm
to observe all of the symbols in the file. How many symbols are defined, and how many undefined? Identify at least three undefined symbols, and look up their purpose using man
or other reference materials, and briefly explain why they are there.nm
to observe all of the symbols in the file. Again, count the defined and undefined symbols. Use ldd
to observe what dynamic libraries the program requires. Look up the purpose of each library and briefly explain it.-static
option to produce a fully statically linked executable. Again, count the defined and undefined symbols.Then select one non-trivial function or method from that program, and show the complete body of that function in each stage of the compiler:
objdump
to show readable assembly language.)objdump
)Comment on the evolution of the function through each of these stages. Without knowing X86 assembly language in detail, can you identify parts of the source code present in the assembly language output? Is anything surprising?
Compile (ha) your answers together into one large document, taking care to organize and format answers and code, so that it is easy to follow. Submit one PDF document via Canvas.
Problem 1 - Write regular expressions that match following entities. (And don’t match other things!) Keep your expressions simple, sticking to the basic three operations and the limited extensions that we discussed in class. You are encouraged to use regex101.com
to test and develop your solutions.
KSBN
or SBGL
or PANC
192.168.1.1
or 10.200.1.1
or 255.255.255.255
5x^3-10
or -10x^2+3x+20
{a,b,c}
of length three or greater that does not end in abc
.
Examples: cba
or ccbbaa
or cbacba
or abcabb
/* a comment */
/* also *** a comment */
/*******/
Problem 2: Convert these REs into NFAs using Thompson’s construction:
for | [a-z]+ | [xb]?[0-9]+
a ( bc*d | ed ) d+
( a*b | b*a | ba ) *
Problem 3: Convert the NFAs in the previous problem into DFAs using the subset construction method.
Do problems 1, 2, 3, at the end of Chapter 4.
Do problems 4, 5, 6 at the end of Chapter 4.