IP Library Granted Patent US 7,219,338
Granted Patent B2
US 7,219,338 · App. 10/397,032 · Granted May 15, 2007

Multi-language compilation

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,219,338
App. No.
10/397,032
Granted
May 15, 2007
Kind
B2
Abstract

A system and method for multi-language compilation is provided. The system and method provide a mechanism for two or more separately written compiler components to co-operate in the compilation of mixed language compilation units. The system mitigates problems associated with conventional approaches to dealing with embedded code blocks. Extensibility is facilitated through the use of a common compiler infrastructure (CCI) in the form of a base class library. Compilers for specific languages are written as extensions of these classes. Common conventions and a flexible extensibility mechanism facilitate cooperation amongst the compilers.

Claims (45)

1. A multi-language compilation system comprising computer hardware for executing the following software components, the system is recorded on a computer-readable medium and capable of execution by a computer, comprising:

a primary parser component that receives a multi-language source code file, wherein the multi-language source code file comprising a markup language with at least one embedded code block of a general purpose programming language and a scripting language, performs syntactical analysis of at least a portion of the multi-language source code file, generates at least a portion of an abstract syntax tree based, at least in part, upon the multi-language source code file, and provides the embedded code block to a secondary parser component, the secondary parser component generates at least a portion of the abstract tree based, at least in part, upon the embedded code block;

a primary compiler component that receives the abstract syntax tree, performs semantic analysis of the abstract syntax tree, transforms at least a portion of the abstract syntax tree based, at least in part, upon the multi-language source code file, provides the embedded code block to a secondary compiler component, the secondary compiler component transforms at least a portion of the abstract syntax tree based, at least in part, upon the embedded code block, accesses the multi-language source code file and the abstract syntax tree to check for semantic errors, and generates an intermediate representation of the multi-language source code file based, at least in part, upon the transformed abstract syntax tree; and

a common compiler infrastructure backend component that receives transformed abstract syntax tree, and generates a common language infrastructure intermediate language representation of the multi-language source code file.

2. The system of claim 1 , further comprising at least one secondary parser component.

3. The system of claim 2 , the secondary parser component associated with at least one of a general purpose programming language and a scripting language.

4. The system of claim 1 , further comprising at least one secondary compiler component.

5. The system of claim 4 , the secondary compiler component associated with at least one of a general purpose programming language and a scripting language.

6. The system of claim 1 , wherein the markup language is XML.

7. The system of claim 1 , the secondary parser component being based, at least in part, upon an extensible base class.

8. The system of claim 1 , the secondary compiler component being based, at least in part, upon an extensible base class.

9. The system of claim 8 , the extensible base class comprising at least one visitor method.

10. The system of claim 9 , the visitor method facilitating transformation of the abstract syntax tree into the intermediate representation of the multi-language source code file.

11. A method of compiling a multi-language source code file comprising:

receiving, by a primary parser component, the multi-language source code file, wherein the multi-language source code file comprises a markup language with at least one embedded code block of a general purpose programming language and a scripting language;

performing syntactical analysis of at least a portion of the multi-language source code file;

generating at least a portion of an abstract syntax tree based, at least in part, upon the multi-language source code file; and

providing the embedded code block to a secondary parser component, the secondary parser component generating at least a portion of the abstract tree based, at least in part, upon the embedded code block;

receiving, by a primary compiler component, the abstract syntax tree;

performing semantic analysis of at least a portion of the abstract syntax tree;

transforming at least a portion of the abstract syntax tree based, at least in part, upon the multi-language source code file;

providing the embedded code block to a secondary compiler component, the secondary compiler component transforming at least a portion of the abstract syntax tree based, at least in part, upon the embedded code block;

accessing the multi-language source code file and the abstract syntax tree to check for semantic errors; and

generating an intermediate representation of the multi-language source code file based, at least in part, upon the transformed abstract syntax tree; and

receiving, by a common compiler infrastructure backend component, the transformed abstract syntax tree; and

generating a common language infrastructure intermediate language representation of the multi-language source file based, at least in part, upon the intermediate representation of the multi-language source code file.

12. The method of claim 11 , the secondary parser component being associated with at least one of a general purpose programming language and a scripting language.

13. The method of claim 11 , at least one node of the abstract syntax tree comprising a visitor method, the visitor method facilitating transformation of the abstract syntax tree into the intermediate representation of the multi-language source code file.

14. A computer readable medium storing computer executable components of a multi-language compilation system comprising:

a primary parser component that receives a multi-language source code file, wherein the multi-language source code file comprises a markup language with at least one embedded code block of a general purpose programming language and a scripting language, performs syntactical analysis of at least a portion of the multi-language source code file, generates at least a portion of an abstract syntax tree based, at least in part, upon the multi-language source code file, and provides the embedded code block to a secondary parser component, the secondary parser component generates at least a portion of the abstract tree based, at least in part, upon the embedded code block;

a primary compiler component that receives the abstract syntax tree, performs semantic analysis of the abstract syntax tree, transforms at least a portion of the abstract syntax tree based, at least in part, upon the multi-language source code file, provides the embedded code block to a secondary compiler component, the secondary compiler component transforms at least a portion of the abstract syntax tree based, at least in part, upon the embedded code block, accesses the multi-language source code file and the abstract syntax tree to check for semantic errors, and generates an intermediate representation of the multi-language source code file based, at least in part, upon the transformed abstract syntax tree; and

a common compiler infrastructure backend component that receives transformed abstract syntax tree, and generates a common language infrastructure intermediate language representation of the multi-language source code file.

15. A multi-language compilation system comprising computer hardware for executing the following software components, the system is recorded on a computer-readable medium and capable of execution by a computer, comprising:

means for receiving, by a primary parser, the multi-language source code file, wherein the multi-language source code file comprises a markup language with at least one embedded code block of a general purpose programming language and a scripting language;

means for performing syntactical analysis of at least a portion of the multi-language source code file;

means for generating at least a portion of an abstract syntax tree based, at least in part, upon the multi-language source code file; and

means for providing the embedded code block to a secondary parser component, the secondary parser component generating at least a portion of the abstract tree based, at least in part, upon the embedded code block;

means for receiving, by a primary compiler component, the abstract syntax tree;

means for performing semantic analysis of at least a portion of the abstract syntax tree;

means for transforming at least a portion of the abstract syntax tree based, at least in part, upon the multi-language source code file;

means for providing the embedded code block to a secondary compiler component, the secondary compiler component transforming at least a portion of the abstract syntax tree based, at least in part, upon the embedded code block;

means for accessing the multi-language source code file and the abstract syntax tree to check for semantic errors; and

means for generating an intermediate representation of the multi-language source code file based, at least in part, upon the transformed abstract syntax tree; and

means for receiving, by a common compiler infrastructure backend component, the transformed abstract syntax tree; and

means for generating a common language infrastructure intermediate language representation of the multi-language source file based, at least in part, upon the intermediate representation of the multi-language source code file.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 9, 2014
From: MICROSOFT CORPORATION
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 034541/0477 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 25, 2003
From: VENTER, BAREND H.
To: MICROSOFT CORPORATION
Reel/Frame 013910/0562 →