edward garcia (ewg2115) naveen revanna (nr2443) niket ...sedwards/classes/2013/w4115... ·...
TRANSCRIPT
![Page 1: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/1.jpg)
C
Edward Garcia (ewg2115) Naveen Revanna (nr2443)
Niket Kandya (nk2531) Sean Yeh (smy2112)
![Page 2: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/2.jpg)
Introduction
ARM V6 Assembly
Subset of C
![Page 3: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/3.jpg)
Supported Features
Functions: malloc
free printf scanf
Types: int
char void
struct pointer (to anything,
unlimited levels) array
Control/looping: if
else while
for return
Most of your favorite features from C...
Operators: + - * /
< <= == > >= && ||
![Page 4: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/4.jpg)
Unsupported Features • double, float types • floating point operations • short and long integers • Unsigned, signedintegers • break, continue • Enums • Sizeof() • Increment, decrement operators. • do-while and switch statements. • auto, register, volatile static and extern. • Multi-file compilation and linkage. • Preprocessing - no # directives. • Function pointers. • Function inlining. • Static and volatile function. • Variable function arguments - Ellipsis (...) • Typecasting
![Page 5: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/5.jpg)
Scoping • Global definition of structs
• Variable Declarations at beginning of functions
• Variable Scope Limited to function • Static Scoping
• Struct Declarations at beginning of functions • Variable, struct and array assignment following
declarations
![Page 6: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/6.jpg)
Architecture
Scanner Program.cpi
Parser AST
SAST Bytecode Arm
Assembly
GCC
Program.s
Cpi Executable
![Page 7: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/7.jpg)
Parser / Ast
Structure Declaration
- Structure name - Member Variables
Function Declarations
- Statement List - Variable Declarations - Return types - Function args - Function name Parser and
Scanner Program
Ast
![Page 8: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/8.jpg)
Creating the SAST
Structure Declaration
- Structure name - Member Variables
Function Declarations
- Function args - Variable Declarations - Return types - Statement List - Function name
SAST
Local Index -variable name -variable types
Struct Index -struct name -member variable name/type
Function Index -Function names -Args -Return Type
Each Function
![Page 9: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/9.jpg)
Creating the SAST
k.c
<
Statement Block
+
while (i < k.c)
=
a
1 b('4', 27)
i
Function Index
Struct Index
Local Index
Function Ex()
![Page 10: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/10.jpg)
Creating the SAST
k.c
<
Statement Block
+
while (i < k.c)
=
a
1 b('4', 27)
i
Function Index
Struct Index
Local Index
Function Ex()
variable/function exist? variable/function duplicate?
![Page 11: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/11.jpg)
Creating the SAST
int
<
Statement Block
+
while (i < k.c)
=
int
1 int
char
Function Index
Struct Index
Local Index
Function Ex()
Assign types to leaves
![Page 12: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/12.jpg)
Creating the SAST
int
int
Statement Block
int
while (int)
int
int
1 int
char
Function Index
Struct Index
Local Index
Function Ex()
Assign types to rest of expressions
![Page 13: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/13.jpg)
Type Checking • While conditions • If conditions • Variable assignments • Function arguments • Binary Operations • Return type checking • Pointer Arithmetic • Array Index Checking • Pointer Assignments • Structs Dereferencing
![Page 14: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/14.jpg)
SP
SP & FP
int a; char b; char c; char d[2]; int e[2]; char *f; int g[a]; (a=2)
varname type offset
a [Int] 4
b [Char] 5
c [Char] 6
d [Arr(2);Char] 8
e [Arr(2);Int] 16
f [Ptr;Char] 20
g [Ptr;Int] 24
a b c
d
e
f
g
SP
FP SP Variable Symbol Table
![Page 15: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/15.jpg)
int a; char b; char c; char d[2]; int e[2]; char *f;
varname type offset
a [Int] 0
b [Char] 5
c [Char]
d [Arr(2);Char] 8
e [Arr(2);Int] 16
f [Ptr;Char] 20
g [Ptr;Int] 24
a
b c d
e
f
Structure Symbol Table
![Page 16: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/16.jpg)
Bytecode Generation
Bytecode Generation
Per Function
Indexes
AST and Type Information
Bytecode List
Per Function
-Stack Offset Information for variables -Label names -Values -Constants
![Page 17: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/17.jpg)
Bytecode
![Page 18: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/18.jpg)
The challenges
• Array offset calculation – arr[a+b+2]
• Pointer arithmetic – *(p+2) – *(2+a+p)
• Structure member offsets – s.a – s.a.c[3] – s->b
• All reduce to (base + offset) bytecode
![Page 19: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/19.jpg)
arr[a+b+2]
–BinEval(t1,a,+,b)
–BinEval(t2,t1,+,2)
–BinEval(t3,t2,*,4)
–BinEval(t4,Addr(arr),+,t3)
–Pntr(t4)
![Page 20: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/20.jpg)
*(2+a+p)
• BinRes(Int);
–BinEval(t1,2,+,a)
• BinRes(Ptr;Int)
– BinEval(t2,t1,*,4)
–BinEval(t3,p,+,t2)
• BinRes(Int)
–Pntr(t3)
![Page 21: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/21.jpg)
Arm Assembly Generation
ARM Assembly
Bytecode List
Per Function
-Stack Offset Information for variables -Label names -Values
Assembly File
-Variable Addresses -Register Allocations -Label address -Constants addresses
![Page 22: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/22.jpg)
Cpi -> Bytecode -> Arm
![Page 23: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/23.jpg)
Testing
161 Tests -64 Type Checking Tests -97 Feature Tests Test Enviornment -SSH and Raspberry Pi Server -QEMU Emulation
![Page 24: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/24.jpg)
Example: Tic-Tac-Toe
- 2 Player game - Features array passing and printf/scanf
![Page 25: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/25.jpg)
Example: Linked List
- Function passing of structs and pointers - Memory allocation with malloc/free
![Page 26: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/26.jpg)
Example: Brainfuck Interpreter
Compiling an interpreter?? Yes! - runbf.sh is used to pass the source code of the bf program along with its length to the bf interpreter - bf reads the two command line arguments through scanf
![Page 27: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/27.jpg)
Project Management
![Page 28: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/28.jpg)
Project Timeline
Scanner Parser
ARM Binops
Hello World
Bytecode Generation
Test Framework
while if
return
SAST
feature tests
structs
Tests Bug Fix
Offset Calc Rework
Pointers
![Page 29: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/29.jpg)
Contributions
• Naveen Revanna - Architecture Czar, Bytecode Generation
• Eddy Garcia - Type Checking, Test Case Generation, External functions
• Sean Yeh - Test suite, Example programs, bug fixes
• Niket Kandya - Scanner/Parser, Scalar Types and Functions, Design
![Page 30: Edward Garcia (ewg2115) Naveen Revanna (nr2443) Niket ...sedwards/classes/2013/w4115... · •Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages](https://reader035.vdocument.in/reader035/viewer/2022081612/5f4e1c2a2140271024773633/html5/thumbnails/30.jpg)
Lessons Learned
• Naveen Revanna - Spend sufficient time in deciding a scalable architecture at early stages. Don't trust your developer self. Document code sufficiently. A good test infrastructure can save you loads of time.
• Eddy Garcia - Pattern matching should be a feature available in all languages. Regression tests are wonderful.
• Sean Yeh - Next time I will not write test suite script in BASH. Nevertheless, the testing framework turned out pretty well.
• Niket Kandya - Time spent on good design is time saved. Functional Programming is a clean approach. Compilers are fun.