Syntax-Directed Translation: Syntax-Directed Definitions, Evaluation Orders for SDD's, Applications of Syntax-Directed Translation, Syntax-Directed Translation Schemes, and Implementing L-Attributed SDD's. Intermediate-Code Generation: Variants of Syntax Trees, Three-Address Code, Types and Declarations, Type Checking, Control Flow, Back patching, Switch-Statements
Lexical Analysis, Tokens, Patterns, Lexemes, Example pattern, Stages of a Lexical Analyzer, Regular expressions to the lexical analysis, Implementation of Lexical Analyzer, Lexical analyzer: use as generator.
Lexical Analysis, Tokens, Patterns, Lexemes, Example pattern, Stages of a Lexical Analyzer, Regular expressions to the lexical analysis, Implementation of Lexical Analyzer, Lexical analyzer: use as generator.
Artificial Intelligence: Introduction, Typical Applications. State Space Search: Depth Bounded
DFS, Depth First Iterative Deepening. Heuristic Search: Heuristic Functions, Best First Search,
Hill Climbing, Variable Neighborhood Descent, Beam Search, Tabu Search. Optimal Search: A
*
algorithm, Iterative Deepening A*
, Recursive Best First Search, Pruning the CLOSED and OPEN
Lists
In this slide you will explore more about how to make derivations ,design parse tree ,what is ambiguity and how to remove ambiguity ,left recursion ,left factoring .
Problem Characteristics in Artificial Intelligence,
Unit -2 Problem Solving and Searching Techniques
o choose an appropriate method for a particular problem first we need to categorize the problem based on the following characteristics.
Is the problem decomposable into small sub-problems which are easy to solve?
Can solution steps be ignored or undone?
Is the universe of the problem is predictable?
Is a good solution to the problem is absolute or relative?
Is the solution to the problem a state or a path?
What is the role of knowledge in solving a problem using artificial intelligence?
Does the task of solving a problem require human interaction?
1. Is the problem decomposable into small sub-problems which are easy to solve?
Can the problem be broken down into smaller problems to be solved independently?
See also Water Jug Problem in Artificial Intelligence
The decomposable problem can be solved easily.
Example: In this case, the problem is divided into smaller problems. The smaller problems are solved independently. Finally, the result is merged to get the final result.
Is the problem decomposable
2. Can solution steps be ignored or undone?
In the Theorem Proving problem, a lemma that has been proved can be ignored for the next steps.
Such problems are called Ignorable problems.
In the 8-Puzzle, Moves can be undone and backtracked.
Such problems are called Recoverable problems.
In Playing Chess, moves can be retracted.
Such problems are called Irrecoverable problems.
Ignorable problems can be solved using a simple control structure that never backtracks. Recoverable problems can be solved using backtracking. Irrecoverable problems can be solved by recoverable style methods via planning.
3. Is the universe of the problem is predictable?
In Playing Bridge, We cannot know exactly where all the cards are or what the other players will do on their turns.
Uncertain outcome!
For certain-outcome problems, planning can be used to generate a sequence of operators that is guaranteed to lead to a solution.
For uncertain-outcome problems, a sequence of generated operators can only have a good probability of leading to a solution. Plan revision is made as the plan is carried out and the necessary feedback is provided.
4. Is a good solution to the problem is absolute or relative?
The Travelling Salesman Problem, we have to try all paths to find the shortest one.
See also Generate and Test Heuristic Search - Artificial Intelligence
Any path problem can be solved using heuristics that suggest good paths to explore.
For best-path problems, a much more exhaustive search will be performed.
5. Is the solution to the problem a state or a path
The Water Jug Problem, the path that leads to the goal must be reported.
LR parsing is one type of bottom up parsing. In the LR parsing, "L" stands for left-to-right scanning of the input.
"R" stands for constructing a right most derivation in reverse.
Artificial Intelligence: Introduction, Typical Applications. State Space Search: Depth Bounded
DFS, Depth First Iterative Deepening. Heuristic Search: Heuristic Functions, Best First Search,
Hill Climbing, Variable Neighborhood Descent, Beam Search, Tabu Search. Optimal Search: A
*
algorithm, Iterative Deepening A*
, Recursive Best First Search, Pruning the CLOSED and OPEN
Lists
In this slide you will explore more about how to make derivations ,design parse tree ,what is ambiguity and how to remove ambiguity ,left recursion ,left factoring .
Problem Characteristics in Artificial Intelligence,
Unit -2 Problem Solving and Searching Techniques
o choose an appropriate method for a particular problem first we need to categorize the problem based on the following characteristics.
Is the problem decomposable into small sub-problems which are easy to solve?
Can solution steps be ignored or undone?
Is the universe of the problem is predictable?
Is a good solution to the problem is absolute or relative?
Is the solution to the problem a state or a path?
What is the role of knowledge in solving a problem using artificial intelligence?
Does the task of solving a problem require human interaction?
1. Is the problem decomposable into small sub-problems which are easy to solve?
Can the problem be broken down into smaller problems to be solved independently?
See also Water Jug Problem in Artificial Intelligence
The decomposable problem can be solved easily.
Example: In this case, the problem is divided into smaller problems. The smaller problems are solved independently. Finally, the result is merged to get the final result.
Is the problem decomposable
2. Can solution steps be ignored or undone?
In the Theorem Proving problem, a lemma that has been proved can be ignored for the next steps.
Such problems are called Ignorable problems.
In the 8-Puzzle, Moves can be undone and backtracked.
Such problems are called Recoverable problems.
In Playing Chess, moves can be retracted.
Such problems are called Irrecoverable problems.
Ignorable problems can be solved using a simple control structure that never backtracks. Recoverable problems can be solved using backtracking. Irrecoverable problems can be solved by recoverable style methods via planning.
3. Is the universe of the problem is predictable?
In Playing Bridge, We cannot know exactly where all the cards are or what the other players will do on their turns.
Uncertain outcome!
For certain-outcome problems, planning can be used to generate a sequence of operators that is guaranteed to lead to a solution.
For uncertain-outcome problems, a sequence of generated operators can only have a good probability of leading to a solution. Plan revision is made as the plan is carried out and the necessary feedback is provided.
4. Is a good solution to the problem is absolute or relative?
The Travelling Salesman Problem, we have to try all paths to find the shortest one.
See also Generate and Test Heuristic Search - Artificial Intelligence
Any path problem can be solved using heuristics that suggest good paths to explore.
For best-path problems, a much more exhaustive search will be performed.
5. Is the solution to the problem a state or a path
The Water Jug Problem, the path that leads to the goal must be reported.
LR parsing is one type of bottom up parsing. In the LR parsing, "L" stands for left-to-right scanning of the input.
"R" stands for constructing a right most derivation in reverse.
The Collections Framework (java.util)- Collections overview, Collection Interfaces, The Collection classes- Array List, Linked List, Hash Set, Tree Set, Priority Queue, Array Deque. Accessing a Collection via an Iterator, Using an Iterator, The For-Each alternative, Map Interfaces and Classes, Comparators, Collection algorithms, Arrays, The Legacy Classes and Interfaces- Dictionary, Hashtable ,Properties, Stack, Vector More Utility classes, String Tokenizer, Bit Set, Date, Calendar, Random, Formatter, Scanner
Exception handling - Fundamentals of exception handling, Exception types, Termination or resumptive models, Uncaught exceptions, using try and catch, multiple catch clauses, nested try statements, throw, throws and finally, built- in exceptions, creating own exception sub classes.
Multithreading- Differences between thread-based multitasking and process-based multitasking, Java thread model, creating threads, thread priorities, synchronizing threads, inter thread communication
Packages- Defining a Package, CLASSPATH, Access protection, importing packages. Interfaces- defining an interface, implementing interfaces, Nested interfaces, applying interfaces, variables in interfaces and extending interfaces.
Stream based I/O (java.io) – The Stream classes-Byte streams and Character streams, Reading console Input and Writing Console Output, File class, Reading and writing Files, Random access file operations, The Console class, Serialization, Enumerations, auto boxing, generics.
Object-Oriented Thinking- A way of viewing world – Agents and Communities, messages and methods, Responsibilities, Classes and Instances, Class Hierarchies- Inheritance, Method binding, Overriding and Exceptions, Summary of Object-Oriented concepts. Java buzzwords, An Overview of Java, Data types, Variables and Arrays, operators, expressions, control statements, Introducing classes, Methods and Classes, String handling.
Inheritance– Inheritance concept, Inheritance basics, Member access, Constructors, Creating Multilevel hierarchy, super uses, using final with inheritance, Polymorphism-ad hoc polymorphism, pure polymorphism, method overriding, abstract classes, Object class, forms of inheritance specialization, specification, construction, extension, limitation, combination, benefits of inheritance, costs of inheritance
JSP
The Anatomy of a JSP Page, JSP Processing, Declarations, Directives, Expressions, Code Snippets, implicit objects, Using Beans in JSP Pages, Using Cookies and session for session tracking, connecting to database in JSP.
Servlet
Common Gateway Interface (CGI), Lifecycle of a Servlet, deploying a servlet, The Servlet API, Reading Servlet parameters, Reading Initialization parameters, Handling Http Request & Responses, Using Cookies and Sessions, connecting to a database using JDBC.
Introduction to XML, Defining XML tags, their attributes and values, Document Type Definition, XML Schemas, Document Object Model, XHTML Parsing XML Data - DOM and SAX Parsers in java.
Introduction to PHP: Declaring variables, data types, arrays, strings, operators, expressions, control structures, functions, Reading data from web form controls like text boxes, radio buttons, lists etc., Handling File Uploads, Connecting to database (MySQL as reference), executing simple queries, handling results, Handling sessions and cookies File Handling in PHP: File operations like opening, closing, reading, writing, appending, deleting etc. on text and binary files, listing directories
Machine-Independent Optimizations: The Principal Sources of Optimization, Introduction to Data-Flow Analysis, Foundations of Data-Flow Analysis, Constant Propagation, Partial Redundancy Elimination, Loops in Flow Graphs
Run-Time Environments: Storage organization, Stack Allocation of Space, Access to Nonlocal Data on the Stack, Heap Management, Introduction to Garbage Collection, Introduction to Trace-Based Collection. Code Generation: Issues in the Design of a Code Generator, The Target Language, Addresses in the Target Code, Basic Blocks and Flow Graphs, Optimization of Basic Blocks, A Simple Code Generator, Peephole Optimization, Register Allocation and Assignment, Dynamic Programming Code-Generation
Syntax Analysis: Introduction, Context-Free Grammars, Writing a Grammar, Top-Down Parsing, Bottom-Up Parsing, Introduction to LR Parsing: Simple LR, More Powerful LR Parsers, Using Ambiguous Grammars, Parser Generators.
Introduction: Language Processors, the structure of a compiler, the science of building a compiler, programming language basics.
Lexical Analysis: The Role of the Lexical Analyzer, Input Buffering, Recognition of Tokens, The Lexical-Analyzer Generator Lex, Finite Automata, From Regular Expressions to Automata, Design of a Lexical-Analyzer Generator, Optimization of DFA-Based Pattern Matchers
E-Mail Security: Pretty Good Privacy, S/MIME IP Security: IP Security overview, IP Security architecture, Authentication Header, Encapsulating security payload, Combining security associations, Internet Key Exchange Case Studies on Cryptography and security: Secure Multiparty Calculation, Virtual Elections, Single sign On, Secure Inter-branch Payment Transactions, Cross site Scripting Vulnerability.
Security Concepts: Introduction, The need for security, Security approaches, Principles of security, Types of Security attacks, Security services, Security Mechanisms, A model for Network Security Cryptography Concepts and Techniques: Introduction, plain text and cipher text, substitution techniques, transposition techniques, encryption and decryption, symmetric and asymmetric key cryptography, steganography, key range and key size, possible types of attacks
Working with Windows and DOS Systems: understanding file systems, exploring Microsoft File Structures, Examining NTFS disks, Understanding whole disk encryption, windows registry, Microsoft startup tasks, MS-DOS startup tasks, virtual machines
More from Jyothishmathi Institute of Technology and Science Karimnagar (20)
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
COMPILER DESIGN- Syntax Directed Translation
1. COMPILER DESIGN- Syntax
Directed Translation
Dr R Jegadeesan Prof-CSE
Jyothishmathi Institute of Technology and Science,
Karimnagar
1
1
2. SYLLABUS
U N I T - 3
2
UNIT - III Syntax-Directed Translation: Syntax-Directed
Definitions, Evaluation Orders for SDD's, Applications of
Syntax-Directed Translation, Syntax-Directed Translation
Schemes, and Implementing L-Attributed SDD's.
Intermediate-Code Generation: Variants of Syntax Trees,
Three-Address Code, Types and Declarations, Type
Checking, Control Flow, Back patching, Switch-Statements,.
1
3. UNIT 1 : HEADING
Topic Name :
Topic :
Aim & Objective :
Principle & Operation/ Detailed Explanation :
Application With Example :
Limitations If Any :
Reference Links :
• Book Details
• Video Link Details
• Please Specify Mtutor
• Video Link details
• (NPTEL, YOUTUBE Lectures and etc.)
• Please specify Mtutor link topic wise(www.m-tutor.com)
• Please specify any course available on <www.coursera.org>,
and http://neat.aicte-india.org
• Related research work (ongoing & completed) – refer from IEEE Transactions, Elsevier and Springer.
If avaliable
Sub Heading
3
1
4. UNIT 3 : Syntax-Directed Translation
•We can associate information with a language construct by attaching attributes to the grammar
symbols.
•A syntax directed definition specifies the values of attributes by associating semantic rules with
the grammar productions.
Introduction
4
1
Production Semantic Rule
E->E1+T E.code=E1.code||T.code||’+’
• We may alternatively insert the semantic actions inside the grammar
E -> E1+T {print ‘+’}
5. 5
1
• A SDD is a context free grammar with attributes and rules
• Attributes are associated with grammar symbols and rules with productions
• Attributes may be of many kinds: numbers, types, table references, strings, etc.
• Synthesized attributes
– A synthesized attribute at node N is defined only in terms of attribute values of children
of N and at N it
• Inherited attributes
– An inherited attribute at node N is defined only in terms of attribute values at N’s
parent, N itself and N’s siblings
UNIT 3 : Syntax-Directed Translation
Syntax Directed Definitions
6. 6
1
Example of S-attributed SDD
Production Semantic Rules
1) L -> E n
2) E -> E1 + T
3) E -> T
4) T -> T1 * F
5) T -> F
6) F -> (E)
7) F -> digit
L.val = E.val
E.val = E1.val + T.val
E.val = T.val
T.val = T1.val * F.val
T.val = F.val
F.val = E.val
F.val = digit.lexval
UNIT 3 : Syntax-Directed Translation
7. Example of mixed attributes
1 7
Production
1) T -> FT’
2) T’ -> *FT’1
3) T’ -> ε
4) F -> digit
Semantic Rules
T’.inh = F.val
T.val = T’.syn
T’1.inh = T’.inh*F.val
T’.syn = T’1.syn
T’.syn = T’.inh
F.val = F.val = digit.lexval
UNIT 3 : Syntax-Directed Translation
8. •A dependency graph is used to determine the order of computation of attributes
•Dependency graph
•For each parse tree node, the parse tree has a node for each attribute associated with
that node
•If a semantic rule defines the value of synthesized attribute A.b in terms of the value of
X.c then the dependency graph has an edge from X.c to A.b
•If a semantic rule defines the value of inherited attribute B.c in terms of the value of X.a
then the dependency graph has an edge from X.c to B.c
•Example!
Evaluation orders for SDD’s
8
•1
UNIT 3 : Syntax-Directed Translation
9. Ordering the evaluation of attributes
9
1
•If dependency graph has an edge from M to N then M must be evaluated
before the attribute of N
•Thus the only allowable orders of evaluation are those sequence of
nodes N1,N2,…,Nk such that if there is an edge from Ni to Nj then i<j
•Such an ordering is called a topological sort of a graph
•Example!
UNIT 3 : Syntax-Directed Translation
10. S-Attributed definitions
10
1
•An SDD is S-attributed if every attribute is synthesized
•We can have a post-order traversal of parse-tree to evaluate attributes in S-attributed
Definitions
•
postorder(N) {
for (each child C of N, from the left) postorder(C);
evaluate the attributes associated with node N;
}
•S-Attributed definitions can be implemented during bottom-up parsing without the
need to explicitly create parse trees
UNIT 3 : Syntax-Directed Translation
11. •A SDD is L-Attributed if the edges in dependency graph goes from Left to Right but
not from Right to Left.
•More precisely, each attribute must be either
•Synthesized
•Inherited, but if there us a production A->X1,X2…,Xn and there is an inherited
attribute Xi.a computed by a rule associated with this production, then the rule may
only use:
•Inherited attributes associated with the head A
•Either inherited or synthesized attributes associated with the occurrences of
symbols X1,X2,…,Xi-1 located to the left of Xi Inherited or synthesized attributes
associated with this occurrence of Xi itself, but in such a way that there is no
cycle in the graph
L-Attributed definitions
11
1
UNIT 3 : Syntax-Directed Translation
12. Type checking and intermediate code generation (chapter 6)
Construction of syntax trees
Leaf nodes: Leaf(op,val)
Interior node: Node(op,c1,c2,…,ck)
Example:
Application of Syntax Directed
Translation
12
1
Production Semantic Rules
1) E -> E1 + T
2) E -> E1 - T
3) E -> T
4) T -> (E)
5) T -> id
6) T -> num
E.node=new node(‘+’, E1.node,T.node)
E.node=new node(‘-’, E1.node,T.node)
E.node = T.node
T.node = E.node
T.node = new Leaf(id,id.entry)
T.node = new Leaf(num,num.val)
UNIT 3 : Syntax-Directed Translation
13. Syntax tree for L-attributed definition
13
1
Production Semantic Rules
1) E -> TE’
2) E’ -> + TE1’
3) E’ -> -TE1’
4) E’ ->
5) T -> (E)
6) T -> id
7) T -> num
E.node=E’.syn
E’.inh=T.node
E1’.inh=new node(‘+’, E’.inh,T.node)
E’.syn=E1’.syn
E1’.inh=new node(‘+’, E’.inh,T.node)
E’.syn=E1’.syn
E’.syn = E’.inh
T.node = E.node
T.node=new Leaf(id,id.entry)
T.node = new Leaf(num,num.val)
UNIT 3 : Syntax-Directed Translation
14. Syntax directed translation schemes
14
1
• An SDT is a Context Free grammar with program fragments embedded within production
bodies
• Those program fragments are called semantic actions
• They can appear at any position within production body
• Any SDT can be implemented by first building a parse tree and then performing the
actions in a left-to-right depth first order
• Typically SDT’s are implemented during parsing without building a parse tree
UNIT 3 : Syntax-Directed Translation
15. Postfix translation schemes
15
1
• Simplest SDDs are those that we can parse the grammar bottom-up and the SDD is
s-attributed
• For such cases we can construct SDT where each action is placed at the end of the
production and is executed along with the reduction of the body to the head of
that production
• SDT’s with all actions at the right ends of the production bodies are called postfix
SDT’s
UNIT 3 : Syntax-Directed Translation
16. Example of postfix SDT
16
1
1) L -> E n {print(E.val);}
2) E -> E1 + T {E.val=E1.val+T.val;}
3) E -> T {E.val = T.val;}
4) T -> T1 * F {T.val=T1.val*F.val;}
5) T -> F {T.val=F.val;}
6) F -> (E) {F.val=E.val;}
7) F -> digit {F.val=digit.lexval;}
UNIT 3 : Syntax-Directed Translation
17. Parse-Stack implementation of postfix SDT’s
17
1
• In a shift-reduce parser we can easily implement semantic action using the parser stack
• For each nonterminal (or state) on the stack we can associate a record holding its attributes
• Then in a reduction step we can execute the semantic action at the end of a production to
evaluate the attribute(s) of the non-terminal at the leftside of the production
• And put the value on the stack in replace of the rightside of production
UNIT 3 : Syntax-Directed Translation
18. Example
18
1
L -> E n {print(stack[top-1].val);
top=top-1;}
E -> E1 + T {stack[top-2].val=stack[top-2].val+stack.val;
top=top-2;}
E -> T
T -> T1 * F {stack[top-2].val=stack[top-2].val+stack.val;
top=top-2;}
T -> F
F -> (E) {stack[top-2].val=stack[top-1].val
top=top-2;}
F -> digit
UNIT 3 : Syntax-Directed Translation
19. •For a production B->X {a} Y
• If the parse is bottom-up then we perform action “a” as soon as this
occurrence of X appears on the top of the parser stack
• If the parser is top down we perform “a” just before we expand Y
•Sometimes we cant do things as easily as explained above
•One example is when we are parsing this SDT with a bottom-up parser
SDT’s with actions inside productions
19
1
1) L -> E n
2) E -> {print(‘+’);} E1 + T
3) E -> T
4) T -> {print(‘*’);} T1 * F
5) T -> F
6) F -> (E)
7) F -> digit {print(digit.lexval);}
UNIT 3 : Syntax-Directed Translation
20. 20
1
• Any SDT can be implemented as
follows
1. Ignore the actions and produce
a parse tree
2. Examine each interior node N
and add actions as new children
at the correct position
3. Perform a postorder traversal
and execute actions when their
nodes are visited
L
E
+
E
{print(‘+’);}
T
F
digit
{print(4);}
T
T F
*
digit
{print(5);}
F
digit
{print(3);}
{print(‘*’);}
UNIT 3 : Syntax-Directed Translation
SDT’s with actions inside productions(cont)
21. SDT’s for L-Attributed definitions
21
1
• We can convert an L-attributed SDD into an SDT using following two rules:
– Embed the action that computes the inherited attributes for a
nonterminal A immediately before that occurrence of A. if several
inherited attributes of A are dpendent on one another in an acyclic
fashion, order them so that those needed first are computed first
– Place the action of a synthesized attribute for the head of a production
at the end of the body of the production
UNIT 3 : Syntax-Directed Translation
22. Example
22
1
S -> while (C) S1 L1=new();
L2=new();
S1.next=L1;
C.false=S.next;
C.true=L2;
S.code=label||L1||C.code||label||L2||S1.code
S -> while ( {L1=new();L2=new();C.false=S.next;C.true=L2;}
C) {S1.next=L1;}
S1{S.code=label||L1||C.code||label||L2||S1.code;}
UNIT 3 : Syntax-Directed Translation
23. UNIT 3 : Intermediate-Code Generation
23
1
• Intermediate code is the interface between front end and
back end in a compiler
• Ideally the details of source language are confined to the front
end and the details of target machines to the back end (a m*n
model)
• In this chapter we study intermediate representations, static
type checking and intermediate code generation
Parser
Static
Checker
Intermediate
Code Generator
Code
Generator
Front end Back end
Introduction
24. UNIT 3 : Intermediate-Code Generation
Variants of syntax trees
24
1
• It is sometimes beneficial to crate a DAG
instead of tree for Expressions.
• This way we can easily show the common sub-
expressions and then use that knowledge
during code generation
• Example: a+a*(b-c)+(b-c)*d
+
+ *
*
-
b c
a
d
25. UNIT 3 : Intermediate-Code Generation
25
SDD for creating DAG’s
1) E -> E1+T
2) E -> E1-T
3) E -> T
4) T -> (E)
5) T -> id
6) T -> num
Production Semantic Rules
E.node= new Node(‘+’, E1.node,T.node)
E.node= new Node(‘-’, E1.node,T.node)
E.node = T.node
T.node = E.node
T.node = new Leaf(id, id.entry)
T.node = new Leaf(num, num.val)
Example:
1) p1=Leaf(id, entry-a)
2) P2=Leaf(id, entry-a)=p1
3) p3=Leaf(id, entry-b)
4) p4=Leaf(id, entry-c)
5) p5=Node(‘-’,p3,p4)
6) p6=Node(‘*’,p1,p5)
7) p7=Node(‘+’,p1,p6)
8) p8=Leaf(id,entry-b)=p3
9) p9=Leaf(id,entry-c)=p4
10) p10=Node(‘-’,p3,p4)=p5
11) p11=Leaf(id,entry-d)
12) p12=Node(‘*’,p5,p11)
13) p13=Node(‘+’,p7,p12)
26. UNIT 3 : Intermediate-Code Generation
26
Value-number method for constructing DAG’s
• Algorithm
– Search the array for a node M with label op, left
child l and right child r
– If there is such a node, return the value number M
– If not create in the array a new node N with label
op, left child l, and right child r and return its value
• We may use a hash table
=
+
10
i
id To entry for i
num 10
+ 1 2
3 1 3
27. UNIT 3 : Intermediate-Code Generation
Three address code
27
1
• In a three address code there is at most one
operator at the right side of an instruction
• Example:
+
+ *
*
-
b c
a
d
28. UNIT 3 : Intermediate-Code Generation
Forms of three address instructions
28
1
• x = y op z
• x = op y
• x = y
• goto L
• if x goto L and ifFalse x goto L
• if x relop y goto L
• Procedure calls using:
– param x
– call p,n
– y = call p,n
• x = y[i] and x[i] = y
• x = &y and x = *y and *x =y
29. UNIT 3 : Intermediate-Code Generation
Example
29
1
• do i = i+1; while (a[i] < v);
L: t1 = i + 1
i = t1
t2 = i * 8
t3 = a[t2]
if t3 < v goto L
Symbolic labels
100: t1 = i + 1
101: i = t1
102: t2 = i * 8
103: t3 = a[t2]
104: if t3 < v goto 100
Position numbers
30. UNIT 3 : Intermediate-Code Generation
Data structures for three address codes
30
1
• Quadruples
– Has four fields: op, arg1, arg2 and result
• Triples
– Temporaries are not used and instead references
to instructions are made
• Indirect triples
– In addition to triples we use a list of pointers to
triples
31. UNIT 3 : Intermediate-Code Generation
Example
31
1
• b * minus c + b * minus c
t1 = minus c
t2 = b * t1
t3 = minus c
t4 = b * t3
t5 = t2 + t4
a = t5
Three address code
minus
*
minus c t3
*
+
=
c t1
b t2
t1
b t4
t3
t2 t5
t4
t5 a
arg1 result
arg2
op
Quadruples
minus
*
minus c
*
+
=
c
b (0)
b (2)
(1) (3)
a
arg1 arg2
op
Triples
(4)
0
1
2
3
4
5
minus
*
minus c
*
+
=
c
b (0)
b (2)
(1) (3)
a
arg1 arg2
op
Indirect Triples
(4)
0
1
2
3
4
5
(0)
(1)
(2)
(3)
(4)
(5)
op
35
36
37
38
39
40
32. UNIT 3 : Intermediate-Code Generation
Type Expressions
32
1
Example: int[2][3]
array(2,array(3,integer))
• A basic type is a type expression
• A type name is a type expression
• A type expression can be formed by applying the array type constructor
to a number and a type expression.
• A record is a data structure with named field
• A type expression can be formed by using the type constructor g for
function types
• If s and t are type expressions, then their Cartesian product s*t is a type
expression
• Type expressions may contain variables whose values are type
expressions
33. UNIT 3 : Intermediate-Code Generation
33
1
Type Equivalence
• They are the same basic type.
• They are formed by applying the same
constructor to structurally equivalent types.
• One is a type name that denotes the other.
34. UNIT 3 : Intermediate-Code Generation
Declarations
34
1
35. UNIT 3 : Intermediate-Code Generation
Storage Layout for Local Names
35
1
• Computing types and their widths
36. UNIT 3 : Intermediate-Code Generation
Storage Layout for Local Names
36
1
Syntax-directed translation of array types
37. UNIT 3 : Intermediate-Code Generation
Sequences of Declarations
37
1
•
•
Actions at the end:
38. UNIT 3 : Intermediate-Code Generation
Fields in Records and Classes
38
1
•
•
39. UNIT 3 : Intermediate-Code Generation
Translation of Expressions and Statements
39
1
• We discussed how to find the types and offset
of variables
• We have therefore necessary preparations to
discuss about translation to intermediate code
• We also discuss the type checking
40. UNIT 3 : Intermediate-Code Generation
Three-address code for expressions
40
1
41. UNIT 3 : Intermediate-Code Generation
Incremental Translation
41
1
42. UNIT 3 : Intermediate-Code Generation
Addressing Array Elements
42
1
• Layouts for a two-dimensional array:
43. UNIT 3 : Intermediate-Code Generation
Semantic actions for array reference
43
1
44. UNIT 3 : Intermediate-Code Generation
Translation of Array References
44
1
Nonterminal L has three synthesized attributes:
• L.addr
• L.array
• L.type
45. UNIT 3 : Intermediate-Code Generation
Conversions between primitive types in Java
45
1
46. UNIT 3 : Intermediate-Code Generation
Introducing type conversions into Expression
evaluation
46
1
47. UNIT 3 : Intermediate-Code Generation
Abstract syntax tree for the function definition
47
1
fun length(x) =
if null(x) then 0 else length(tl(x)+1)
This is a polymorphic function
in ML language
48. UNIT 3 : Intermediate-Code Generation
48
1
Algorithm for Unification
49. UNIT 3 : Intermediate-Code Generation
Unification algorithm
49
1
boolean unify (Node m, Node n) {
s = find(m); t = find(n);
if ( s = t ) return true;
else if ( nodes s and t represent the same basic type ) return true;
else if (s is an op-node with children s1 and s2 and
t is an op-node with children t1 and t2) {
union(s , t) ;
return unify(s1, t1) and unify(s2, t2);
}
else if s or t represents a variable {
union(s, t) ;
return true;
}
else return false;
}
50. UNIT 3 : Intermediate-Code Generation
Control Flow
50
1
boolean expressions are often used to:
• Alter the flow of control.
• Compute logical values.
52. UNIT 3 : Intermediate-Code Generation
Flow-of-Control Statements
52
1
53. UNIT 3 : Intermediate-Code Generation
Syntax-directed definition
53
1
54. UNIT 3 : Intermediate-Code Generation
Generating three-address code for Boolean
54
1
55. UNIT 3 : Intermediate-Code Generation
translation of a simple if-statement
55
1
•
•
56. UNIT 3 : Intermediate-Code Generation
Backpatching
56
1
• Previous codes for Boolean expressions insert symbolic labels for jumps
• It therefore needs a separate pass to set them to appropriate addresses
• We can use a technique named backpatching to avoid this
• We assume we save instructions into an array and labels will be indices in
the array
• For nonterminal B we use two attributes B.truelist and B.falselist together
with following functions:
– makelist(i): create a new list containing only I, an index into the array of
instructions
– Merge(p1,p2): concatenates the lists pointed by p1 and p2 and returns a
pointer to the concatenated list
– Backpatch(p,i): inserts i as the target label for each of the instruction on
the list pointed to by p
57. UNIT 3 : Intermediate-Code Generation
Backpatching for Boolean Expressions
57
1
•
•
58. UNIT 3 : Intermediate-Code Generation
Backpatching for Boolean Expressions
58
1
• Annotated parse tree for x < 100 || x > 200
&& x ! = y
59. UNIT 3 : Intermediate-Code Generation
Flow-of-Control Statements
59
1
60. UNIT 3 : Intermediate-Code Generation
Translation of a switch-statement
60
1