Development of a PHP Compiler for Mono
Total Page:16
File Type:pdf, Size:1020Kb
University of Augsburg Diploma Thesis Development of a PHP Compiler for Mono Presented by: Raphael Romeikat Matriculation Number: 700543 Revisers: Prof. Dr. Bernhard Bauer Prof. Dr. Bernhard Möller Institute of Computer Science University of Augsburg Deadline: February 6th, 2006 Contents 1 Preface............................................................................................. 4 1.1 Incentives .................................................................................. 4 1.2 Goals ......................................................................................... 5 2 Existing Projects................................................................................ 7 2.1 PHP Sharp.................................................................................. 7 2.2 IronPHP ..................................................................................... 8 2.3 Phalanger................................................................................... 8 3 Mono ..............................................................................................10 3.1 Introduction...............................................................................10 3.2 History......................................................................................10 3.3 Architecture...............................................................................11 4 PHP ................................................................................................14 4.1 Introduction...............................................................................14 4.2 History......................................................................................15 4.3 Architecture...............................................................................17 4.4 Syntax and Semantics.................................................................18 4.4.1 Statements......................................................................18 4.4.2 Comments.......................................................................19 4.4.3 Types..............................................................................19 4.4.4 Variables .........................................................................24 4.4.5 Constants ........................................................................29 4.4.6 Expressions .....................................................................29 4.4.7 Operators ........................................................................30 4.4.8 Control Structures............................................................36 4.4.9 Functions ........................................................................42 4.4.10 Classes and Objects ..........................................................45 5 CIL .................................................................................................51 5.1 Introduction...............................................................................51 5.2 History......................................................................................51 5.3 Architecture...............................................................................53 5.4 Syntax and Semantics.................................................................55 5.4.1 Types..............................................................................56 5.4.2 Assemblies and Modules....................................................57 5.4.3 Classes ...........................................................................58 5.4.4 Fields..............................................................................59 5.4.5 Methods ..........................................................................60 5.4.6 Base Instruction Set..........................................................63 5.4.7 Object Model Instruction Set ..............................................67 - 2 - 6 Translation from PHP to CIL................................................................69 6.1 Statements and Comments ..........................................................69 6.2 Types .......................................................................................70 6.3 Variables ...................................................................................72 6.4 Constants..................................................................................75 6.5 Expressions and Operators...........................................................76 6.6 Control Structures......................................................................78 6.6.1 Conditional Statements.....................................................78 6.6.2 Loop Statements..............................................................81 6.7 Functions ..................................................................................84 6.8 Classes and Objects ....................................................................87 7 mPHP – the Mono PHP Compiler..........................................................90 7.1 Architecture...............................................................................90 7.2 Implementation..........................................................................91 7.3 Deployment ...............................................................................92 7.3.1 Executable.......................................................................92 7.3.2 Runtime Library................................................................93 7.4 Usage .......................................................................................93 7.5 Example....................................................................................94 8 Prospects.........................................................................................96 Appendix A CIL Instruction Set..............................................................97 Appendix B PHP Features Included.......................................................105 List of Abbreviations ...........................................................................105 List of Figures ....................................................................................107 List of Tables .....................................................................................108 List of Definitions ...............................................................................109 List of Examples.................................................................................109 Bibliography ......................................................................................113 - 3 - 1 Preface 1.1 Incentives Mono is an open source implementation of Microsoft's .NET platform including the tools, libraries and compilers required to build software on a variety of platforms: Linux, UNIX, MacOS X, Solaris and Windows. It is based on the Common Language Infrastructure (CLI), standardized by the ECMA standards group and ratified as standards by ISO. Similar to Java, the Mono environment consists of a compiler, virtual machine and API classes. The main compiler fo- cus is on the C# language, but more and more languages are being supported by third party extensions. Mono is unique in many ways. It helps developers to use their existing knowledge on other platforms as libraries can be shared be- tween languages. It brings together many modern programming language fea- tures. In particular the combination of them in a single environment makes Mono efficient to develop with. PHP is a widely-used scripting language especially suited for web development and can easily be embedded into HTML. Its syntax and semantics are similar to other popular programming languages such as C, Perl and Java, therefore PHP can be used intuitively and easily. PHP also offers object oriented pro- gramming for better modularity and reuse of code. Another great strength is the availability of a very large number of library routines which makes coding of web pages very powerful. These libraries include a more or less complete set of system calls and access to a large variety of databases like Oracle and MySQL. A recent Netcraft survey indicates that PHP is used on almost 20 mil- lion domains worldwide, so it is the most widely used scripting language on the World Wide Web. Given the popularity of Mono and PHP, why not take advantage of combining both? How could such benefits look like? With PHP's benefits on Mono many new possibilities would become reality. Mono developers could use PHP as a remarkably straightforward programming language outside of web pages. In this way they could also take advantage of the rapidly increasing range of use- ful PHP packages available. - 4 - 1.2 Goals We have now seen how popular and widespread Mono and PHP are. What I want to do is enable the Mono Community to take advantage of PHP's fea- tures. Therefore the main goal of this project is building a compiler that en- ables PHP scripts to run as standalone application on Mono. Before doing so major aspects of the compiler's design and implementation need to be speci- fied, to the greatest extent possible at the very beginning. 1.2.1 Input and Output Language As a compiler is basically a translator, it has an input and an output language. The question about input language can clearly be answered. Input to our com- piler will be PHP scripts written in its current version 5. Code being executable on Mono is written in Common Intermediate Language (CIL), so this will be the output language of our compiler. CIL is a low level human readable programming language and resembles