Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 3240: Languages and Computation Course Overview Sasha Boldyreva.

Similar presentations


Presentation on theme: "CS 3240: Languages and Computation Course Overview Sasha Boldyreva."— Presentation transcript:

1 CS 3240: Languages and Computation Course Overview Sasha Boldyreva

2 Personnel Instructor: Alexandra (Sasha) Boldyreva  Email: aboldyre@cc.gatech.edu  Office: Klaus 3444  Office Hours: Tue. & Wed. at 2:00 to 3:00 pm Or by appointment TAs: TBA  Email: TBA  Office Hours: TBA

3 Required Textbooks Bundle ISBN# 1418879746, including “Compiler Construction Principles and Practice” by Kenneth C. Louden, Thompson Course Technology, 1997, ISBN 0534939724 “Introduction to Theory of Computation, Second Edition” by Michael Sipser, Thompson Course Technology, 2005, ISBN 0534950973

4 Course Objectives Formal languages  Understand definitions of regular and context-free languages and their corresponding “machines”  Understand their computational powers and limitations Compiler concepts  Understand their applications in compilers  Front-end of compiler  Lexical analysis, parsing, semantic analysis Theory of computation  Understand Turing machines  Understand decidability

5 Course Syllabus Lexical analysis, scanners, pattern matching Regular expressions, DFAs, NFAs and automata Limits on regular expressions, pumping lemma Practical parsing, LL and LR parsing Context-free languages, grammars, Chomsky Hierarchy Pushdown automata, deterministic vs. non-deterministic Attribute grammars, type inferencing Context-free vs. context-sensitive grammars Decidable vs. Undecidable problems, Turing Machines, Halting Problem Complexity of computation, classes of languages P/NP, space and time completeness

6 Grading Homeworks: 25% Mini-project: 15% Midterm : 30% Final: 30% Homeworks to be submitted in class - hardcopy No late homework or assignments Homework should be concise, complete, and precise Tests will be in class

7 Class Policies Students must write solutions to assignments completely independently General discussions are allowed on assignments among students, but names of collaborators must be reported Cell phones off, silence please

8 Resources Class webpage: see T-Square Check for schedule changes.

9 Introduction to Compiler Concepts

10 Compilers What is a compiler?  A program that translates an executable program from source language into target language  Usually source language is high-level language, and target language is object (or machine) code  Related to interpreters Why compilers?  Programming in machine (or assembly) language is tedious, error prone, and machine dependent  Historical note: In 1954, IBM started developing FORTRAN language and its compiler

11 Why study theory of compiler? Besides it is required… Prerequisite for developing advanced compilers, which continues to be active as new computer architectures emerge Useful to develop software tools that parse computer codes or strings  E.g., editors, debuggers, interpreters, preprocessors, … Important to understand how compliers work to program more effectively

12 How Does Compiler Work? Scanner Parser Semantic Action Intermediate Representation Intermediate Representation Semantic Error Request Token Get Token Checking Start Front End: Analysis of program syntax and semantics

13 Parts of Compilers 1. Lexical Analysis 2. Syntax Analysis 3. Semantic Analysis 4. Code Generation 5. Optimization Analysis Synthesis Front End Back End Focus of this class.

14 The Big Picture Parsing: Translating code to rules of grammar. Building representation of code. Scanning: Converting input text into stream of known objects called tokens. Simplifies parsing process. Grammar dictates syntactic rules of language i.e., how legal sentence could be formed Lexical rules of language dictate how legal word is formed by concatenating alphabet.

15 Overall Operation Parser is in control of the overall operation  Demands scanner to produce a token Scanner reads input file into token buffer & forms a token (How?)  Token is returned to parser Parser attempts to match the token (How?)  Failure: Syntax Error!  Success: Does nothing and returns to get next token, or Takes semantic action

16 Overall Operation Semantic action: look up variable name  If found okay  If not: put in symbol table If semantic checks succeed, do code- generation (How?) Continue to get next token No more tokens? Done!

17 Scanning/Tokenization Input File Token Buffer What does the Token Buffer contain?  Token being identified Why a two-way ( ) street?  Characters can be read  and unread  Termination of a token

18 Example main() m

19 Example main() am

20 Example main() iam

21 Example main() niam

22 Example main() (niam

23 Example main() niam Keyword : main

24 Parser Translating code to rules of a grammar Control the overall operation Demands scanner to produce a token Failure: Syntax Error! Success:  Does nothing and returns to get next token, or  Takes semantic action

25 Grammar Rules  MAIN OPENPAR CLOSEPAR  NULL  VAR , VAR  NULL  CURLYOPEN CURLYCLOSE  VAR ;  VAR = ;  VAR  +  -  INT  FLOAT

26 Demo main() { int a,b; a = b; } Parser Scanner Token Buffer

27 Demo main() { int a,b; a = b; } Parser Scanner "Please, get me the next token" Token Buffer

28 Demo main() { int a,b; a = b; } Parser Scanner m

29 Demo main() { int a,b; a = b; } Parser Scanner am

30 Demo main() { int a,b; a = b; } Parser Scanner iam

31 Demo main() { int a,b; a = b; } Parser Scanner niam

32 Demo main() { int a,b; a = b; } Parser Scanner (niam

33 Demo main() { int a,b; a = b; } Parser Scanner niam

34 Demo main() { int a,b; a = b; } Parser Scanner Token: main Token Buffer

35 Demo main() { int a,b; a = b; } Parser Scanner "I recognize this" Token Buffer

36 Parsing (Matching) Start matching using a rule When match takes place at certain position, move further (get next token & repeat) If expansion needs to be done, choose appropriate rule (How to decide which rule to choose?) If no rule found, declare error If several rules found, the grammar (set of rules) is ambiguous

37 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner "Please, get me the next token"

38 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: MAIN  MAIN OPENPAR CLOSEPAR

39 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner "Please, get me the next token"  MAIN OPENPAR CLOSEPAR

40 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: OPENPAR  MAIN OPENPAR CLOSEPAR

41 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: CLOSEPAR  MAIN OPENPAR CLOSEPAR  NULL

42 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: CLOSEPAR  MAIN OPENPAR CLOSEPAR  NULL

43 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: CLOSEPAR  MAIN OPENPAR CLOSEPAR

44 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: CURLYOPEN  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE

45 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: INT  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ;  INT

46 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: INT  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ;  INT

47 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: INT  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ;  INT

48 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: VAR  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

49 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ',' [COMMA]  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

50 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: VAR  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

51 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

52 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

53 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

54 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ; , VAR  NULL

55 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ;

56 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR ;

57 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: VAR  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;  VAR

58 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: '='  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;  VAR

59 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: VAR  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;  VAR

60 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: VAR  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;  VAR

61 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: VAR  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;  VAR

62 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;

63 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: ';'  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE  VAR = ;

64 Scanning & Parsing Combined main() { int a,b; a = b; } Parser Scanner Token: CURLYCLOSE  MAIN OPENPAR CLOSEPAR  CURLYOPEN CURLYCLOSE

65 What Is Happening? During/after parsing?  Tokens get gobbled Symbol tables  Variables have attributes  Declaration attached attributes to variables Semantic actions  What are semantic actions? Semantic checks

66 Symbol Table int a,b; Declares a and b  Within current scope  Type integer Use of a and b now legal Basic Symbol Table NameTypeScope aint"main" bint"main"

67 Typical Semantic Actions Enter variable declaration into symbol table Look up variables in symbol table Do binding of looked-up variables (scoping rules, etc.) Do type checking for compatibility Keep the semantic context of processing a + b + c  t1 = a + b t2 = t1 + c Semantic Context

68 How Are Semantic Actions Called? Action symbols embedded in the grammar  Each action symbol represents a semantic procedure  These procedures do things and/or return values Semantic procedures are called by parser at appropriate places during parsing Semantic stack implements & stores semantic records

69 Semantic Actions  #put-type #do-decl  int | float  #add-decl  ID#proc-decl #put-type puts given type on semantic stack #proc-decl builds decl record for var on stack #add-decl builds decl-chain #do-decl traverses chain on semantic stack using backwards pointers entering each var into symbol table id3 id2 id1 type #do-decl  NameTypeScope id113 id213 id313 decl record

70 Semantic Actions What else can semantic actions do in addition to storing and looking up names in a symbol table? Two type of semantic actions  Checking (binding, type compatibility, scoping, etc.)  Translation (generate temporary values, propagate them to keep semantic context).

71 Full Compiler Structure Scanner Parser Semantic Action Start Code Generation CODE Semantic Error Most compilers have two pass

72 Summary Front-end of compiler: scanner and parser Translation takes place in back end Scanner, parser and code generator are automated  How? We will answer this question in this class


Download ppt "CS 3240: Languages and Computation Course Overview Sasha Boldyreva."

Similar presentations


Ads by Google