`
lobin
  • 浏览: 417783 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Programming Language

 
阅读更多
 
写道

 

写道

 

写道

 

 

写道

 

Programming Language

 

 

关于编译器的一些想法

 

程序语言可以编译执行,也可以解释执行。编译执行的语言称为编译型语言,解释执行的语言称为解释型语言。通常我们将程序代码直接编译成机器代码运行的程序语言称为编译型语言,而将程序代码不直接编译成机器代码进行解释执行的程序语言称为解释型语言。一般解释型语言会有一个专门的解释器,负责解释执行源代码,最常见的我们的shell脚本,如windows下的bat、com脚本,linux下的sh、bash等脚本。除了这些纯脚本的脚本程序,其他的包括javascript,lua等。甚至groovy,scala,clojure,java,python,ruby,php,perl,scheme,lisp等很多高级语言都支持在解释模式下执行。但需要类似解释器的编程语言也不一定就是解释型语言,虽然有些语言也支持解释执行。如java语言,java程序运行时需要通过java程序,它就类似一个解释器。包括go语言,go程序也可以通过一个go程序去运行,也类似一个解释器。具体是编译执行还是解释执行,要看实际运行时采用了那种执行方式。

 

但可以肯定的是,解释型语言一定会有个专门的解释器负责解释执行。另一个可以肯定的是,我们知道程序最终要转换为机器语言才能运行,CPU处理器负责执行机器语言。而对于编译型语言来说,CPU处理器所面向执行的指令就是源代码编译而成的对应的机器指令。而对于解释型语言,CPU处理器所面向执行的指令可能并不是源代码编译而成的对应的机器指令。这里可能界定起来比较模糊。

 

现在很多语言在编译时,并不直接编译成机器代码,而是先编译成某种中间代码。在运行时,再将中间代码编译成机器代码运行。这种语言会经过两次编译运行,一次是我们通常理解的编译期,另一次就是运行时编译,就是我们常说的即时编译。也可能在运行时对中间代码进行解释执行。甚至在有些语言中会同时采用这两种方式。

 

解释型语言可能直接对源代码解释执行,虽然这样不太好,每次都要将源代码解释之后才能执行,也可能会先将源代码转换成某种中间代码再解释执行。

 

程序代码最终要转换为机器语言才能运行。不管是编译型语言还是解释型语言,最终都要转换为机器语言去运行。另外,现代编译器及相关编译技术已经变得很强大,很多以前认为是编译型的语言也可以解释执行,以前认为是解释型语言也可以编译执行。很多现代化的语言混合了编译运行和解释运行,这种被称为混合型语言。很多语言称为编译型语言还是解释型语言的界定变得模糊。

 

程序代码---------->机器代码

写道
+--------+ +----------+
| source |-------------------------->| assembly |
+--------+ +----------+
| |
| |
| |
| |
| |
| +----------+ |
+----------->| obj |<-------------+
+----------+
|
|
|
v
+----------+
| exe |
+----------+

 

 

程序代码---------->中间代码---------->机器代码

 

写道


+--------+ +----------+
| ir |-------------------------->| bytecode |
+--------+ +----------+
^ |
| |
| |
| |
| v
+--------+ +----------+
| source |-------------------------->| assembly |
+--------+ +----------+
| |
| |
| |
| |
| |
| +----------+ |
+----------->| obj |<-------------+
+----------+
|
|
|
v
+----------+
| exe |
+----------+

 

 

 

指令译码器

 

语言文法

 

 

OO

 

对象模型

 

对象内存结构

 

写道
+----------------+ +-----------------+
| Object Pointer |------>| Object Instance |
+----------------+ +-----------------+

 

 

写道
+------------------+ +-------------------------+ +-----------------+
| Object Reference |------>| Object Metadata Pointer |------>| Object Metadata |
+------------------+ +-------------------------+ +-----------------+
| |
| |
| Object Instance |
| |
| |
+-------------------------+

 

 

写道
+------------------+ +-------------------------+ +-----------------+
| Object Reference |------>| Object Metadata Pointer |------>| Object Metadata |
+------------------+ +-------------------------+ +-----------------+
| |
| |
| Object Instance Pointer |
| |
| |
+-------------------------+
|
|
v
+-----------------+
| Object Instance |
+-----------------+

编译器

写道
The Lex & Yacc Page
http://dinosaur.compilertools.net

 

写道
Lex - A Lexical Analyzer Generator
M. E. Lesk and E. Schmidt
http://dinosaur.compilertools.net/lex/index.html

 

写道
Lex − A Lexical Analyzer Generator M. E. Lesk and E. Schmidt
http://dinosaur.compilertools.net/lex/lex.ps

 

 

写道
Abstract Syntax Tree Implementation Idioms
Joel Jones
jones@cs.ua.edu
Department of Computer Science
University of Alabama
https://hillside.net/plop/plop2003/Papers/Jones-ImplementingASTs.pdf

 

写道
Understanding source code evolution using abstract syntax tree matching (2005)
https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.88.5815

 

写道
Understanding Source Code Evolution Using Abstract
Syntax Tree Matching
Iulian Neamtiu
neamtiu@cs.umd.edu
Jeffrey S. Foster
jfoster@cs.umd.edu
Michael Hicks
mwh@cs.umd.edu
Department of Computer Science
University of Maryland at College Park
https://web.njit.edu/~ineamtiu/pubs/evolution.pdf

 

写道
Understanding Source Code Evolution Using Abstract
Syntax Tree Matching ∗
Iulian Neamtiu
neamtiu@cs.umd.edu
Jeffrey S. Foster
jfoster@cs.umd.edu
Michael Hicks
mwh@cs.umd.edu
Department of Computer Science
University of Maryland at College Park
http://www.cs.umd.edu/~mwh/papers/evolution.pdf

 

写道
Understanding Source Code Evolution Using Abstract
Syntax Tree Matching ∗
Iulian Neamtiu
neamtiu@cs.umd.edu
Jeffrey S. Foster
jfoster@cs.umd.edu
Michael Hicks
mwh@cs.umd.edu
Department of Computer Science
University of Maryland at College Park
http://www.cs.tufts.edu/~jfoster/papers/msr05.pdf

 

写道
Clang 13 documentation
INTRODUCTION TO THE CLANG AST
https://clang.llvm.org/docs/IntroductionToTheClangAST.html

 

 

 

 

 

 

  • 大小: 22 KB
  • 大小: 24 KB
  • 大小: 21.2 KB
  • 大小: 14.3 KB
  • 大小: 41.4 KB
  • 大小: 36.7 KB
  • 大小: 32.7 KB
  • 大小: 27.1 KB
  • 大小: 23.5 KB
  • 大小: 5.6 KB
  • 大小: 5.1 KB
  • 大小: 21.3 KB
分享到:
评论

相关推荐

    《the c programming language》(CLH)

    《the c programming language》(CLH)《the c programming language》(CLH)《the c programming language》(CLH)《the c programming language》(CLH)《the c programming language》(CLH)《the c programming ...

    The Swift Programming Language 各版本集合包(epub,mobi,pdf)

    Apple最新的编程语言swift官方文档《The Swift Programming Language》的epub,mobi以及pdf 版本,epub 版本为官方英文版,拥有完整的目录,pdf和mobi为epub个人转制版,适合不同设备阅读。 Swift is a new ...

    The AWK programming language(中文版)

    值得注意的是这本 书的第二作者Brain W是神一样耳朵科学家,他是《The C programming language》的作者,Brain的《程序设计与实现》也是一本好书。 AWK的学习资料网上一搜一大片,其实只要静下心来把这本书中的代码...

    The C Programming Language(2nd Edition) 中文完整版PDF

    《The C Programming Language》(中文版)是C语言的权威性经典著作,由C语言的研制者之一Brian W. Kernighan和Dennis M. Ritchie共同编写,中文版由徐宝文、李帮清等人翻译。这本书全面、系统地介绍了标准C语言及其...

    《The Swift Programming Language》中文版

    《The Swift Programming Language》中文版是一本专门为Swift编程语言爱好者和开发者编写的指南,它深入浅出地介绍了Apple公司推出的这款高效、现代化的编程语言。Swift以其简洁的语法、强大的功能和安全的设计理念...

    The C++ Programming Language 英文原版 第4版

    《The C++ Programming Language》是C++编程语言的权威指南,由C++的创始人Bjarne Stroustrup撰写。这本英文原版的第四版详细介绍了C++的最新特性和最佳实践,对于深入理解C++语言的核心概念和技术具有极高的价值。 ...

    中文版The Go Programming Language.pdf 文字的

    The Go Programming Language中文文字版,说得很不,值得学习的语言

    《The Swift Programming Language》中文文档

    Hi大家好, 鉴于《The Swift Programming Language》中文文档版本繁杂,避免大家因为版本问题引起学习不便。@未来眼之老码团队 会定期发布最新的中文文档。大家有任何问题欢迎垂询! BR OldCoder Team

    the c++ programming language (3rd edition) pdf

    《C++ Programming Language》(第三版)是Bjarne Stroustrup所著的一本经典书籍,被誉为C++领域的权威指南。这本书是C++初学者和经验丰富的开发者的重要参考资料,它详细介绍了C++语言的核心概念、语法以及编程实践...

    THE C++ PROGRAMMING LANGUAGE课后习题答案

    《C++ Programming Language》是Bjarne Stroustrup编写的经典C++教程,它深入浅出地介绍了C++语言的各个方面。本资源包含了该书课后习题的完整答案,对于学习C++编程的读者来说,是极好的参考资料。下面我们将详细...

    The C Programming Language 第二版 pdf(中英文版本+习题解答)

    总的来说,《C Programming Language》第二版是学习C语言的必备教材,无论是初学者还是有经验的程序员,都能从中获益。配合提供的中英文版本和习题解答,学习者可以全面而深入地了解C语言,并通过实践提高编程能力。...

    The C++ programming language 中英两版

    这本书的第三版,即"The C++ Programming Language 3rd Edition",是C++98标准发布后的更新版本,对C++98进行了全面的解释和示例,帮助开发者理解标准库和现代C++编程的最佳实践。 中文版的书名是"C.程序设计语言_...

    The C programming Language(chm格式完整版)

    The C programming Language By Brian W. Kernighan and Dennis M. Ritchie. Published by Prentice-Hall in 1988 ISBN 0-13-110362-8 (paperback) ISBN 0-13-110370-9 目录结构: Contents Preface Preface ...

    The Go Programming Language英文完整版

    Go语言圣经英文版本,The Go Programming Language英文完整版

    the java programming language fourth editionArnoldGoslingHolmes06

    《The Java Programming Language》第四版是由Java编程语言的创造者Ken Arnold、James Gosling和David Holmes共同编著的一本经典教程。这本书对于新手和经验丰富的程序员来说都是不可或缺的学习资源。自出版以来,它...

    The C++ Programming Language(4th)Exercises 无水印pdf

    The C++ Programming Language(4th)Exercises 英文无水印pdf 第4版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如...

Global site tag (gtag.js) - Google Analytics