Final CSE 131 Fall 2014

Similar documents
Final CSE 131 Fall 2015

Midterm CSE 131 Winter 2014

Midterm CSE 131 Fall 2014

Midterm CSE 131 Winter 2012

Midterm CSE 131 Winter 2013

Midterm CSE 131 Winter 2015

Final CSE 131 Winter 2010

Final CSE 131 Winter 2012

CSE 30 Fall 2013 Final Exam

CSE 30 Fall 2012 Final Exam

CSE 30 Winter 2014 Final Exam

Final CSE 131B Spring 2004

CSE 30 Winter 2009 Final Exam

CSE 30 Spring 2007 Final Exam

CSE 30 Fall 2007 Final Exam

CSE 30 Spring 2006 Final Exam

CSE 30 Fall 2006 Final Exam

Final CSE 131B Spring 2005

Midterm CSE 131B Spring 2005

Number Systems for Computers. Outline of Introduction. Binary, Octal and Hexadecimal numbers. Issues for Binary Representation of Numbers

Chapter 2 Bits, Data Types, and Operations

CPS 104 Computer Organization and Programming Lecture-2 : Data representations,

Chapter 2 Bits, Data Types, and Operations

Chapter 2 Bits, Data Types, and Operations

Do not start the test until instructed to do so!

Chapter 8. Characters and Strings

ASSIGNMENT 5 TIPS AND TRICKS

Unit 3, Lesson 2 Data Types, Arithmetic,Variables, Input, Constants, & Library Functions. Mr. Dave Clausen La Cañada High School

Do not start the test until instructed to do so!

CPSC 213. Introduction to Computer Systems. Procedures and the Stack. Unit 1e

Do not start the test until instructed to do so!

Chapter 2 Bits, Data Types, and Operations

Data Representation and Binary Arithmetic. Lecture 2

CPSC 213. Introduction to Computer Systems. Procedures and the Stack. Unit 1e

Fundamentals of Programming (C)

CS341 *** TURN OFF ALL CELLPHONES *** Practice NAME

CSE-1520R Test #1. The exam is closed book, closed notes, and no aids such as calculators, cellphones, etc.

Chapter 2 Bits, Data Types, and Operations

CSE-1520R Test #1. The exam is closed book, closed notes, and no aids such as calculators, cellphones, etc.

Final CSE 131B Winter 2003

Under the Hood: Data Representation. Computer Science 104 Lecture 2

Oberon Data Types. Matteo Corti. December 5, 2001

CS 159 Credit Exam. What advice do you have for students who have previously programmed in another language like JAVA or C++?

CS/ECE 252: INTRODUCTION TO COMPUTER ENGINEERING UNIVERSITY OF WISCONSIN MADISON

CS/ECE 252: INTRODUCTION TO COMPUTER ENGINEERING UNIVERSITY OF WISCONSIN MADISON

This exam is to be taken by yourself with closed books, closed notes, no calculators.

6.096 Introduction to C++ January (IAP) 2009

Number Representations

Final Exam Practice Questions

Data Representa5on. CSC 2400: Computer Systems. What kinds of data do we need to represent?

Week 1 / Lecture 2 8 March 2017 NWEN 241 C Fundamentals. Alvin Valera. School of Engineering and Computer Science Victoria University of Wellington

CPSC 213. Introduction to Computer Systems. Procedures and the Stack. Unit 1e

APPENDIX A : KEYWORDS... 2 APPENDIX B : OPERATORS... 3 APPENDIX C : OPERATOR PRECEDENCE... 4 APPENDIX D : ESCAPE SEQUENCES... 5

Numbers and Computers. Debdeep Mukhopadhyay Assistant Professor Dept of Computer Sc and Engg IIT Madras

Simple Data Types in C. Alan L. Cox

1.1. INTRODUCTION 1.2. NUMBER SYSTEMS

The Binary Number System

Data Representa5on. CSC 2400: Computer Systems. What kinds of data do we need to represent?

Introduction to Decision Structures. Boolean & If Statements. Different Types of Decisions. Boolean Logic. Relational Operators

Binary Numbers. The Basics. Base 10 Number. What is a Number? = Binary Number Example. Binary Number Example

Fundamental Data Types

Experiment 3. TITLE Optional: Write here the Title of your program.model SMALL This directive defines the memory model used in the program.

Chapter 3. Information Representation

DATA REPRESENTATION. Data Types. Complements. Fixed Point Representations. Floating Point Representations. Other Binary Codes. Error Detection Codes

JAVA OPERATORS GENERAL

Bits and Bytes. Data Representation. A binary digit or bit has a value of either 0 or 1; these are the values we can store in hardware devices.

CMPSC 311- Introduction to Systems Programming Module: Strings

Exercises Software Development I. 03 Data Representation. Data types, range of values, internal format, literals. October 22nd, 2014

5/17/2009. Digitizing Discrete Information. Ordering Symbols. Analog vs. Digital

CSE 5A Final Fall 2006

Number Systems Base r

Question Points Score Total: 100

Chapter 2 Number System

Fundamentals of Programming

The Compiler So Far. CSC 4181 Compiler Construction. Semantic Analysis. Beyond Syntax. Goals of a Semantic Analyzer.

Please refer to the turn-in procedure document on the website for instructions on the turn-in procedure.

1 Lexical Considerations

Variables and data types

User s Manual. Xi3000 Scanner. Table of Contents

CS2141 Software Development using C/C++ C++ Basics

Midterm CSE 131B Spring 2006

This is great when speed is important and relatively few words are necessary, but Max would be a terrible language for writing a text editor.

Lecture 10 Arrays (2) and Strings. UniMAP SEM II - 11/12 DKT121 1

Lecture (09) x86 programming 8

void mouseclicked() { // Called when the mouse is pressed and released // at the same mouse position }

C Language Part 1 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

Character Set. The character set of C represents alphabet, digit or any symbol used to represent information. Digits 0, 1, 2, 3, 9

PureScan - ML1. Configuration Guide. Wireless Linear Imager Wireless Laser scanner - 1 -

n NOPn Unary no operation trap U aaa NOP Nonunary no operation trap i

CMSC 313 Lecture 03 Multiple-byte data big-endian vs little-endian sign extension Multiplication and division Floating point formats Character Codes

Appendix A Developing a C Program on the UNIX system

ENCM 339 Fall 2017 Lecture Section 01 Lab 3 for the Week of October 2

Java provides a rich set of operators to manipulate variables. We can divide all the Java operators into the following groups:

Lexical Considerations

Configuration Manual PULSAR C CCD SCANNER. Table of Contents

CSCI-1200 Data Structures Fall 2017 Lecture 5 Pointers, Arrays, & Pointer Arithmetic

3. Provide the routing table of host H located in LAN E, assuming that the host s network interface is called i1. ARes/ComNet

EE 109 Unit 3. Analog vs. Digital. Analog vs. Digital. Binary Representation Systems ANALOG VS. DIGITAL

Problem Max. Points Act. Points Grader

Midterm Exam, Fall 2015 Date: October 29th, 2015

Transcription:

Login Name Student ID Name Signature Final CSE 131 Fall 2014 Page 1 Page 2 Page 3 Page 4 Page 5 Page 6 Page 7 Page 8 (35 points) (24 points) (30 points) (32 points) (25 points) (36 points) (30 points) (48 points) Subtotal (260 points) = 100% Page 9 Extra Credit (18 points) [7% Extra Credit] Total This exam is to be taken by yourself with closed books, closed notes, no electronic devices You are allowed both sides of an 85"x11" sheet of paper handwritten by you 0

1 Given the following CUP grammar snippet (assuming all other Lexing and terminals are correct): Expr ::= Expr T_MINUS {: Systemoutprintln("A"); : Des {: Systemoutprintln("B"); : Des {: Systemoutprintln("C"); : ; Des ::= T_STAR {: Systemoutprintln("D"); : Des {: Systemoutprintln("E"); : T_MINUSMINUS {: Systemoutprintln("F"); : Des {: Systemoutprintln("G"); : T_AMPERSAND {: Systemoutprintln("H"); : Des {: Systemoutprintln("I"); : Des2 ; Des2 ::= Des2 {: Systemoutprintln("J"); : T_MINUSMINUS {: Systemoutprintln("K"); : Des3 ; Des3 ::= ; T_ID What is the output when parsing the follow expression (you should have 23 lines/letters in your output) [23pts]: Output *&*x-- - --*y-- - **z In the above grammar, which has higher precedence: post-decrement operator or address-of operator, or do they have the same precedence? [1pt] What type of associativity does the Des2 rule have in the above grammar? [1pt] Fill in the blanks of the below RC program with the appropriate types to be semantically correct: [6pts] function : void main() { a = 75; b = 42; w = &a; x = &a; y = &b; z = &w; cout << *&*x-- - --*y-- - **z; What is the output of the above program when executed? [4pts] _ 1

2 Given the following Reduced-C code fragment: [24pts] function : int & foo( int & x, int y ) { /* Body of code not important for this question */ function : int main() { int a = 12345; int * b = &a; ++foo( a, *b ); return a; Complete the SPARC Assembly language statements that might be emitted by a compliant Reduced-C compiler from this quarter for function main() Allocate, store, and access all local variables on the Stack See comments section _ align 4 global : set SAVEmain, %g1 save %sp, %g1, %sp /* Initialize the local variables in this stack frame */ set, %o0 st %o0,! int a = 12345;, %o0! large blank can be one or two operands st %o0,! int * b = &a; /* Set up the 2 actual arguments to foo() */, %o0, %o1, %o1! large blank can be one or two operands! large blank can be one or two operands! large blank can be one or two operands call foo! Call function foo() st, [%fp - 12]! Save return value into local temp1 /* Handle increment after function call */ ld [%fp - 12], %o0, %o1! large blank can be one or two operands inc st, [%o0]! ++foo( ); /* return a; */,! return a; SAVEmain = -(92 + 12) & -8! Save space for 2 local vars + 1 temp 2

3 In object-oriented languages like Java, determining which method code/instructions to bind to (to execute) is done at run time rather than at compile time (this is known as dynamic dispatch or dynamic binding) However, the name-mangled symbol denoting a particular method name is determined at compile time Given the following Java class definitions, specify the output of each print() method invocation [30pts] class Good { public void print(good p) { Systemoutprintln("Good 1"); class Bad extends Good { public void print(good p) { Systemoutprintln("Bad 1"); public void print(bad p) { Systemoutprintln("Bad 2"); class Ugly extends Bad { public void print(good p) { Systemoutprintln("Ugly 1"); public void print(bad p) { Systemoutprintln("Ugly 2"); public void print(ugly p) { Systemoutprintln("Ugly 3"); public class Overloading_Final_Exam { public static void main (String [] args) { Good cowboy1 = new Ugly(); Good cowboy2 = new Bad(); Good cowboy3 = new Good(); Bad cowboy4 = new Ugly(); Bad cowboy5 = new Bad(); Ugly cowboy6 = new Ugly(); Now remove the entire print(good p) { method in class Bad and remove the entire print(bad p) { method in class Ugly Specify the output of each print() method with these changes below cowboy1print( cowboy1 ); cowboy2print( cowboy2 ); cowboy3print( cowboy3 ); cowboy4print( cowboy4 ); cowboy5print( cowboy5 ); cowboy6print( cowboy6 ); cowboy2print( (Ugly) cowboy6 ); cowboy4print( (Bad) cowboy6 ); cowboy6print( (Good) cowboy6 ); ( (Bad) cowboy2 )print(cowboy2); ( (Bad) cowboy2 )print(cowboy4); ( (Bad) cowboy2 )print(cowboy6); ( (Ugly) cowboy1 )print(cowboy2); ( (Ugly) cowboy1 )print(cowboy4); ( (Ugly) cowboy1 )print(cowboy6); 3

4 Give the order of the typical GCC compilation stages and on to actual execution as discussed in class [4pts]: 0 Object file (progo) 5 Assembly file (progs) 1 progexe/aout (Executable image) 6 ccomp (C compiler) 2 Program Execution 7 Source file (progc) 3 Loader 8 as (Assembler) 4 cpp (C preprocessor) 9 ld (Linkage Editor) gcc: > > > > > > > > > Give the order of the general phases of compilation in a typical compiler as discussed in class [4pts]: A Target language (eg assembly) E Scanner (Lexical analysis) B Machine-independent code improvement (optional) F Parser (Syntax analysis) C Machine-specific code improvement (optional) G Target code generation D Parser (Semantic analysis/intermediate code gen) H Source language (eg C) > > > > > > > Give an example of a non-converting type cast (underlying bit pattern does not change) [2pts]: int i = 5; float f = ; What are the values of a and b after the following two Reduced-C statements? [4pts] int a = 5; bool b = (++a > 5) && ((a = 2)!= 0); Value of a is _ Value of b is _ Fill in the blanks [2pts each]: _ analysis deals with verifying correct structure of a program _ analysis deals with verifying correct meaning of a program A(n) _ performs thorough analysis and nontrivial transformations on a program in language L1 into an equivalent program in language L2 This is in contrast to a(n) _ which directly performs the operations implied by the program The is the main data structure used in the compiler to store/retrieve information about names (variables, functions, etc) and other attributes (eg types) associated with these names There are two types of programming errors can easily occur when the programmer is left to deal with dynamic memory management Garbage collection essentially eliminates these two errors, which are and Variables declared to be will not be optimized by the compiler The technique of is typically employed by compilers to enable overloaded functions to resolve into unique symbols/labels 4

5 Given the Reduced-C code shown in the box below, complete the SPARC Assembly language statements that might be emitted by a compliant Reduced-C compiler from this quarter for function main() Include the necessary run-time checks [25pts] : section _ align 4 global _ set SAVEmain, %g1 save %sp, %g1, %sp! new x; set 1, %o0 set, %o1 call /* Reduced-C */ structdef MS { int x; int y; ; function : void main() { MS * x; new x; delete x;,! delete x; ld, %o0, Delete_Error12 call st, L47 Delete_Error12:!! Assume DeleteMsg string already defined in "data" section DeleteMsg, call set call, L47: SAVEmain = -(92 + 4) & -8 5

6 Given the C array declaration C double * a[2][2]; Mark with an A the memory location(s) where we would find the array element a[1][0]: a: Each box represents a byte in memory [4pts] low memory high memory Given the definitions below, indicate what type of object each expression is [25pts] function : int & f1() { /* Function body not important */ function : int * f2() { /* Function body not important */ int[5] a; int b = 1; const int c = 5; int *d = &b; A) Modifiable L-val B) Non-Modifiable L-val C) R-val a a[4] &a[4] c b + c d *d *&*d &*d b ::b 42 a[a[b]] f1() + f1() f1() &b (float) b f1()++ ++*f2() *f2() --*++d *(float *)d ++a[0] nullptr f2() Use virtual register notation for each of the following Change the following instruction into three instructions which are most likely a time improvement over the single instruction when it comes to actual execution time You can assume register r7 is free [4pts] r2 = r4 * 1022 What term describes this particular kind of peephole optimization? Change the following instruction into another single instruction which is most likely a time improvement over the current instruction when it comes to actual execution time [2pts] r1 = 16 % 5 What term describes this particular kind of peephole optimization? Change the following instructions into a single instruction which is most likely a time improvement over the current instructions when it comes to actual execution time Assume registers r1, r3, and r4 are not needed after the last statement [1pt] r1 = 7 r2 = r2 * 1 r3 = r1 + 13 r4 = r3 r1 r5 = r4 + r2 6

7 Given the following C++ program (whose semantics in this case is similar to our Reduced-C) and a real compiler s code gen as discussed in class, fill in the values stored in memory for each of the global and local variables and parameters in the run time environment for the SPARC architecture when the program reaches the comment /* HERE */ Do not add any unnecessary padding [26pts] struct fubar { int a; int * b; float c; ; int a = 88; float b; void foo( float & f, int i ) { int * var1; int var2; struct fubar var3[2]; var2 = -21; var1 = (int *) calloc( 1, sizeof(int) ); f = 123; var3[0]c = b; var3[1]a = i + 2; var3[1]b = &var3[1]a; i = 75; var3[0]a = a; var3[0]b = &i; var3[1]c = f; *var1 = var2 + 8; hypothetical decimal memory locations a: 2000 b: Heap low memory 6000 60300 /* HERE */ free( var1 ); int main() { foo(b, a); return 0; %fp 60400 high memory Using the Right-Left rule (which follows the operator precedence rules) write the definition of a variable named fubaz that is a pointer to a 2D array of 19 rows by 4 columns where each element is a pointer to a pointer to a function that takes a pointer to a pointer to a short as a single parameter and returns a pointer to an array of 27 elements where each element is a pointer to an int [4pts] ; 7

8 Given the following C type definitions: [24pts] struct bar { struct foo { struct fubar { char a; char e; int i; short b; int * f; short j[3]; char c; struct bar g; struct foo k; int d; double h; char l; ; ; ; struct fubar fubaz; Hint: Draw the memory layout of these structs (including padding) on the scratch paper at the end of this exam What is the sizeof( struct bar )? _ What is the sizeof( struct foo )? _ What is the sizeof( struct fubar )? _ What is the offsetof( struct fubar, kgb )? _ If struct fubar had been defined as union fubar instead, what would be the sizeof(union fubar)? _ What is the sizeof( struct fubar ) if members of all 3 structs are reordered largest to smallest? _ Given the following C++ code where??? may represent different parameter passing modes, what values do you expect to be printed if the parameter passing mode is: [24pts] int x = 6; int y = 9; void bar(int * x, int * y) { cout << *x << endl; cout << *y << endl; *x = 5; *y = 10; y = x; cout << *x << endl; cout << *y << endl; cout << ::x << endl; cout << ::y << endl; void foo(int??? x, int y) { cout << x << endl; cout << y << endl; bar(&x, &y); cout << x << endl; cout << y << endl; cout << ::x << endl; cout << ::y << endl; int main() { foo(x, y); return 0; call-by-value? call-by-reference? 8

9 Extra Credit What gets printed when the following C program is executed? [18pts] #include <stdioh> int main() { char a[] = "TRITON!!"; char *p = a; printf( "%c\n", ++*p++ ); printf( "%c\n", (p[6] = p[0]) - 15 ); printf( "%c\n", (*p++ = 'A')? (*a 2) : 'Z' ); printf( "%c\n", (*p = --p[3]) - 9 ); printf( "%c\n", *(p++ - 2) = '*' ); printf( "%c\n", (5[a] = *p++ + 2) 19 ); printf( "%c\n", (p[-4] = 'G') + 12 ); printf( "%c\n", p[-1] = p[2] = (*p - 10) ); printf( "%s\n", a ); return 0; A portion of the C Operator Precedence Table Operator Associativity ++ postfix increment L to R -- postfix decrement [] array element () function call -------------------------------------- * indirection R to L ++ prefix increment -- prefix decrement & address-of sizeof size of type/object (type) type cast -------------------------------------- * multiplication L to R / division % modulus -------------------------------------- + addition L to R - subtraction -------------------------------------- -------------------------------------- = assignment R to L Hexadecimal - Character 00 NUL 01 SOH 02 STX 03 ETX 04 EOT 05 ENQ 06 ACK 07 BEL 08 BS 09 HT 0A NL 0B VT 0C NP 0D CR 0E SO 0F SI 10 DLE 11 DC1 12 DC2 13 DC3 14 DC4 15 NAK 16 SYN 17 ETB 18 CAN 19 EM 1A SUB 1B ESC 1C FS 1D GS 1E RS 1F US 20 SP 21! 22 " 23 # 24 $ 25 % 26 & 27 28 ( 29 ) 2A * 2B + 2C, 2D - 2E 2F / 30 0 31 1 32 2 33 3 34 4 35 5 36 6 37 7 38 8 39 9 3A : 3B ; 3C < 3D = 3E > 3F? 40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G 48 H 49 I 4A J 4B K 4C L 4D M 4E N 4F O 50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W 58 X 59 Y 5A Z 5B [ 5C \ 5D ] 5E ^ 5F _ 60 61 a 62 b 63 c 64 d 65 e 66 f 67 g 68 h 69 i 6A j 6B k 6C l 6D m 6E n 6F o 70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w 78 x 79 y 7A z 7B { 7C 7D 7E ~ 7F DEL 9

Scratch Paper 10

Scratch Paper 11