Vilmos Zsombori , Shanghai

Slides:



Advertisements
Similar presentations
Compilers Course 379K, TTH 9:30-11:00 Instructor: Dr. Doron A. Peled Office Hours: Mon 11:00-12:00.
Advertisements

Lesson 6 CDT301 – Compiler Theory, Spring 2011 Teacher: Linus Källberg.
CPSC 388 – Compiler Design and Construction
報告者:會計四 簡思佳 The process of converting a program written in a high-level language into a machine-executable form. language implementation Ex.C++
Compilers and Language Translation
Yacc Examples Compiler Design Lecture (01/28/98) Computer Science Rensselaer Polytechnic.
Environments and Evaluation
COP4020 Programming Languages
C Chuen-Liang Chen, NTUCS&IE / 1 COMPILER Chuen-Liang Chen Department of Computer Science and Information Engineering National Taiwan University Taipei,
Chapter 1 Introduction Dr. Frank Lee. 1.1 Why Study Compiler? To write more efficient code in a high-level language To provide solid foundation in parsing.
Parser-Driven Games Tool programming © Allan C. Milne Abertay University v
Chapter 10: Compilers and Language Translation Invitation to Computer Science, Java Version, Third Edition.
CSC 338: Compiler design and implementation
Compiler course 1. Introduction. Outline Scope of the course Disciplines involved in it Abstract view for a compiler Front-end and back-end tasks Modules.
CST320 - Lec 11 Why study compilers? n n Ties lots of things you know together: –Theory (finite automata, grammars) –Data structures –Modularization –Utilization.
1 COMP 3438 – Part II-Lecture 1: Overview of Compiler Design Dr. Zili Shao Department of Computing The Hong Kong Polytechnic Univ.
Chapter 6 Programming Languages (2) Introduction to CS 1 st Semester, 2015 Sanghyun Park.
D. M. Akbar Hussain: Department of Software & Media Technology 1 Compiler is tool: which translate notations from one system to another, usually from source.
Interpretation Environments and Evaluation. CS 354 Spring Translation Stages Lexical analysis (scanning) Parsing –Recognizing –Building parse tree.
COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 3, 09/11/2003 Prof. Roy Levow.
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
CS453 LectureIntroduction1 CS453 Compiler Construction Instructor:Wim Bohm Computer Science Building 470 TA: tba
Group 4 Java Compiler Group Members: Atul Singh(Y6127) Manish Agrawal(Y6241) Mayank Sachan(Y6253) Sudeept Sinha(Y6483)
CPS 506 Comparative Programming Languages Syntax Specification.
Compiler design Lecture 1: Compiler Overview Sulaimany University 2 Oct
The course. Description Computer systems programming using the C language – And possibly a little C++ Translation of C into assembly language Introduction.
Introduction Lecture 1 Wed, Jan 12, The Stages of Compilation Lexical analysis. Syntactic analysis. Semantic analysis. Intermediate code generation.
1 Compiler Design (40-414)  Main Text Book: Compilers: Principles, Techniques & Tools, 2 nd ed., Aho, Lam, Sethi, and Ullman, 2007  Evaluation:  Midterm.
IN LINE FUNCTION AND MACRO Macro is processed at precompilation time. An Inline function is processed at compilation time. Example : let us consider this.
Weaving a Debugging Aspect into Domain-Specific Language Grammars SAC ’05 PSC Track Santa Fe, New Mexico USA March 17, 2005 Hui Wu, Jeff Gray, Marjan Mernik,
Introduction to Compiling
YACC. Introduction What is YACC ? a tool for automatically generating a parser given a grammar written in a yacc specification (.y file) YACC (Yet Another.
CS 153: Concepts of Compiler Design October 21 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
Compiler Design Introduction 1. 2 Course Outline Introduction to Compiling Lexical Analysis Syntax Analysis –Context Free Grammars –Top-Down Parsing –Bottom-Up.
LESSON 04.
Compiler Introduction 1 Kavita Patel. Outlines 2  1.1 What Do Compilers Do?  1.2 The Structure of a Compiler  1.3 Compilation Process  1.4 Phases.
The Model of Compilation Natawut Nupairoj, Ph.D. Department of Computer Engineering Chulalongkorn University.
Yacc. Yacc 2 Yacc takes a description of a grammar as its input and generates the table and code for a LALR parser. Input specification file is in 3 parts.
Concepts and Realization of a Diagram Editor Generator Based on Hypergraph Transformation Author: Mark Minas Presenter: Song Gu.
What is a compiler? –A program that reads a program written in one language (source language) and translates it into an equivalent program in another language.
Chapter 4: Syntax analysis Syntax analysis is done by the parser. –Detects whether the program is written following the grammar rules and reports syntax.
More yacc. What is yacc – Tool to produce a parser given a grammar – YACC (Yet Another Compiler Compiler) is a program designed to compile a LALR(1) grammar.
2-1. LEX & YACC. 2 Overview  Syntax  What its program looks like –Context-free grammar, BNF  Syntax-directed translation –A grammar-oriented compiling.
CS416 Compiler Design1. 2 Course Information Instructor : Dr. Ilyas Cicekli –Office: EA504, –Phone: , – Course Web.
CS 404Ahmed Ezzat 1 CS 404 Introduction to Compiler Design Lecture Ahmed Ezzat.
Lecture 9 Symbol Table and Attributed Grammars
Compiler Design (40-414) Main Text Book:
Chapter 1 Introduction.
Introduction to Compiler Construction
Lexical and Syntax Analysis
Compiler Construction
Chapter 1 Introduction.
CS 153: Concepts of Compiler Design December 5 Class Meeting
Bison: Parser Generator
CMPE 152: Compiler Design December 5 Class Meeting
Basic Program Analysis: AST
Review: Compiler Phases:
CSE401 Introduction to Compiler Construction
Compilers B V Sai Aravind (11CS10008).
COP4020 Programming Languages
CMPE 152: Compiler Design August 21/23 Lab
Compiler design.
Subject: Language Processor
Syntax Analysis - 3 Chapter 4.
Yacc Yacc.
Appendix B.2 Yacc Appendix B.2 -- Yacc.
Chapter 10: Compilers and Language Translation
Lec00-outline May 18, 2019 Compiler Design CS416 Compiler Design.
Review for the Midterm. Overview (Chapter 1):
Faculty of Computer Science and Information System
Presentation transcript:

Vilmos Zsombori 4.01.2005, Shanghai 3/28/2017 Transformation of C code to Matlab/Simulink models Approach based on parsing Vilmos Zsombori 4.01.2005, Shanghai

Motivation Considerations: Prerequisite of automatic transformation: The amount of source code to be transformed Transformation patterns Existence of third party parser generators that allow to automatically generate a customized parser for a user defined grammar Prerequisite of automatic transformation: Customized lexical analyzer Customized syntactic analyzer Implementation of output actions Benefits: The tool would reduce a large amount of transformation time The automatic transformation is not susceptible to “human” errors The actions are attached to language structures, in consequence the transformation is uniform, based on patterns and modeling guidelines In case of library upgrades, name changes or pattern changes, the model update requests incomparably less time than the manual approach

Customized parser and code generator Approach Based on lexical and syntactic analysis Automatic parser generation Action specification according to the transformation patterns and the modeling guidelines Key concept   General architecture cpp.jj grammar specification parser specification action specification Synthesis (JavaCC) CPPParser.java and C2Model.java Customized parser and code generator

Customized parser and code generator cpp.jj grammar specification parser action Customized parser and code generator Synthesis (JavaCC) CPPParser.java and C2Model.java General architecture

Lexical and Syntactic analysis (I) SKIP : { “ ” | “\n” | <“/*” … “/”> } TOKEN : { <#DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])*> | <STRING_LITERAL: "\"" … "\""> … } TOKEN : { <CONTINUE: "continue"> | <VOLATILE: "volatile"> | <TYPEDEF: "typedef"> | <IF: "if"> | <DO: "do"> … } TOKEN : { <IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*> | <#LETTER: ["$","A"-"Z","_","a"-"z"]> | <#DIGIT: ["0"-"9"]> } Lexical analysis (tokens – regular expressions)    

Lexical and Syntactic analysis (II) translation_unit : external_declaration | translation_unit external_declaration; external_declaration : function_definition | declaration; function_definition : declaration_specifiers declarator declaration_list compound_statement | declaration_specifiers declarator compound_statement | declarator declaration_list compound_statement | declarator compound_statement; selection_statement : IF '(' expression ')' statement | IF '(' expression ')' statement ELSE statement | SWITCH '(' expression ')' statement; Syntactic analysis (C grammar)    

Customized parser and code generator General architecture cpp.jj grammar specification parser specification action specification Synthesis (JavaCC) CPPParser.java and C2Model.java Customized parser and code generator

Parser generation (I) Based on lexical and syntactic descriptions Available parser generators: Lex + Yacc Generation of C code for the parser Tool freely available for Linux but NOT for Windows Needs a C compiler (gcc) JavaCC Generation of Java code for the parser Needs a Java compiler and a Java Virtual Machine at runtime Both, JDK and JavaCC are FREE-ly available The generated parser is platform independent The current work is based on JavaCC

Parser generation (II) Lexical Analyzer Syntax JavaCC Compiler JavaCC Source cpp.jj CPPParserTokens.java CPPParserConstants.java TokenManagerError.java CPPParser.java ParseException.java How JavaCC works

Customized parser and code generator General architecture cpp.jj grammar specification parser specification action specification Synthesis (JavaCC) CPPParser.java and C2Model.java Customized parser and code generator

Action specification (I) The actions are attached to the syntactic structures Based on: Transformation patterns: Function: If-then-else structure: Modeling guidelines Data flow, naming, colors, … void sign_init(void) { … } if ( expression ) { statement1 } else { statement2 }

Action specification (II) Block construction is possible through the Matlab script language: Implementation of the actions: Java class hierarchy – Node class subtype Each class implements the process() method in a specific way, wrapping the output action; e.g. EqualityExpression: String process ( PrintWriter outputStream, String prefix ) { String rightHandSide = getChild(0).process(outputStream, prefix); // process the right-hand side String rightHandSide = getChild(1).process(outputStream, prefix); // process the left-hand side outputStream.print(“add_block(built-in/Relational Operator‘“ + ”, ‘” + prefix + ”/eq’, Operator’, ‘==’)”); outputStream.print(“add_line(‘” + prefix + ”’, “ + rightHandSide + ”/1’, ‘eq/1’)”); outputStream.print(“add_line(‘” + prefix + ”’, “ + leftHandSide + ”/1’, ‘eq/2’)”); // interconnect the blocks return “eq/1”; // return the output port } add_block(…) { blocks for the logical expression } add_block(‘built-in/Subsystem’, ‘{prefix}/statement1’) add_block(‘built-in/Subsystem’, ‘{prefix}/statement2’) add_block(‘built-in/Logical Operator’, ‘…/not’, ‘Operation’, ‘NOT’) add_line(‘{prefix}’, ‘{logical exprn out}/1’, ‘statement1/Enable’) add_line(‘{prefix}’, ‘{logical exprn out}/1’, ‘not/1’) add_line(‘{prefix}’, ‘not/1’, ‘statement2/Enable’)

Customized parser and code generator General architecture cpp.jj grammar specification parser specification action specification Synthesis (JavaCC) CPPParser.java and C2Model.java Customized parser and code generator

The translation process Process overview   C2Model.jar (customized parser and code generator) Source code sign.c Matlab script sign.m Matlab Simulink model sign.mdl C2Model.jar – customized parser and code generator Builds up a parse tree from the source code according to the lexical/syntactic definitions consists of Node class subtypes the nodes wrap the appropriate output actions symbol tables – attached to Scopes: type-, variable-, function- and port-table efficient - using hash map

The translation process – example typedef struct { int i, j; } stru; void fcn1(void) { a = b; } int fcn2(int u, int v) { if ((a<b) && (c+d <= e)) stru.i = u + v; int fcn3(int h) { if (a == b) { u = c + d; } else { v = r + t; Source C file (test.c) TranslationUnit [4] … ExternalDeclaration [1] FunctionDefinition [3] DeclarationSpecifiers [1] TypeSpecifier [0] Declarator [1] DirectDeclarator [1] token: fcn1 CompoundStatement [1] StatementList [1] Statement [1] ExpressionStatement [1] Expression [1] AssignmentExpression [3] UnaryExpression [1] PostfixExpression [1] PrimaryExpression [0] token: a AssignmentOperator [0] AssignmentExpression [1] PrimaryExpression [0] token: b Parse tree   C2Model.jar

The translation process – example (ctd.)   Parse tree new_system('test') add_block('built-in/Subsystem','test/fcn1') add_block('built-in/Outport','test/fcn1/a') set_param('test/fcn1/a', …) add_block('built-in/Inport','test/fcn1/b') set_param('test/fcn1/b', …) add_line('test/fcn1', 'b/1', 'a/1') … save_system('test') Matlab script (test.m) C2Model.jar Simulink model Matlab

Achievements and open questions The lexical and syntactic definitions are complete The symbol tables for each scope are constructed correctly Type-, variable-, function- and port-table The actions are implemented for: All binary and n-ary operations Assignment and conditional expressions Selection statement, jump statement, iteration statement Bus systems are created for structures Bus selectors are used for operations on structure members Operational on the entire sign.c Open questions: Handling of function-calls Handling of arrays

Results – Bus systems

Results – Conditional operations

Results – If-then-else structure

Results – Functions

Conclusion A new automated translation method has been explored, based on parsing and a third party compiler generator, which transforms source code written in C/C++ to Matlab/Simulink models. This yields fast and error-free operation, and has proven capable of handling large source codes without human intervention. Although there are some issues concerning the organization of the output models (localization and positioning), results at this stage are encouraging. Switching the implemented actions, the parser can be adapted to any “bit-by-bit transformation”. However, the focus of this approach is the pure source code, not the logic and the functionality. This is the reason, why it is unable to meet the simplification and the re-engineering issues, which are among the essential objectives of the entire project. Therefore the developed tool could only assist the transformation work.