徽标
联盟百科
通讯
下载应用,请到 Google Play
新! 在您的Android™设备上下载联盟百科!
自由
比浏览器更快的访问!
 

編譯器編譯程式

指数 編譯器編譯程式

一個編譯器編譯程式(compiler-compiler)或者編譯器產生程式(compiler generator)是一個幫助使用者根據某種語言或機器的規則來產生語法分析器,直譯器或者編譯器的工具。目前最早也是最常見的編譯器編譯程式是語法分析器產生程式(parser generator)這個形式,其輸入是一個程式語言的形式文法 (一般是用BNF表示),然後產生出一些語法分析器的程式碼,作為這個語言編譯器的一部分。 理想的編譯器編譯程式,只要給予一個程式語言的完整描述以及目標的指令集架構,然後就能自動從中產生出合適的編譯器。實際上, 最先進的技術還沒有到達這麼複雜的地步,而大多數現有的編譯器產生程式都不能處理語意學或者目標架構的資訊部份。.

12 关系: ANTLR巴科斯范式形式文法編譯器编程语言直譯器語法分析器语义学GNU bisonYacc源代码指令集架構

ANTLR

ANTLR(全名:ANother Tool for Language Recognition)是基于LL(*)算法实现的语法解析器生成器(parser generator),用Java语言编写,使用自上而下(top-down)的递归下降LL剖析器方法。由旧金山大学的Terence Parr博士等人於1989年開始發展。 ANTLR最初叫做PCCTS,Purdue Compiler Construction Tool Set,是Terence Parr在普渡大学攻讀碩士學位時的創作,在Hank Dietz教授的指导下,开始研究构造自动化的分析器。1993年,Parr取得博士學位,並於同年发布ANTLR 1.10版。最早的ANTLR只支持Java, 直到ANTLR 3以後開始支持Ada95、C、C#、JavaScript、Objective-C、Perl、Python、Ruby、C++和Standard ML。 如同一般的詞法分析器(lexer)和語法分析器(parser),ANTLR可以用來產生樹狀分析器(tree parsers)。ANTLR 文法定义使用類似EBNF(Extended Backus-Naur Form)的定义方式,形象十分簡潔直观。例如: ANTLR用A: a;来表示规则,舊式的方法則是以 A.

新!!: 編譯器編譯程式和ANTLR · 查看更多 »

巴科斯范式

巴科斯范式(Backus Normal Form,縮寫為 BNF),又称为巴科斯-诺尔范式(Backus-Naur Form,縮寫同樣為 BNF,也譯为巴科斯-瑙尔范式、巴克斯-诺尔范式),是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)首先引入的用来描述计算机语言语法的符号集。 尽管巴科斯范式也能表示一部分自然语言的语法,它还是更广泛地使用于程序设计语言、指令集、通信协议的语法表示中。大多数程序设计语言或者形式语义方面的教科书都采用巴科斯范式。在各种文献中还存在巴科斯范式的一些变体,如扩展巴科斯范式 EBNF 或扩充巴科斯范式 ABNF。.

新!!: 編譯器編譯程式和巴科斯范式 · 查看更多 »

形式文法

在计算机科学中,形式语言是:某个字母表上,一些有限长字串的集合,而形式文法是描述这个集合的一种方法。形式文法之所以这样命名,是因为它与人类自然语言中的文法相似的缘故。 形式文法描述形式语言的基本想法是,从一个特殊的初始符号出发,不断的应用一些产生式规则,从而生成出一个字串的集合。产生式规则指定了某些符号组合如何被另外一些符号组合替换。举例来说,假设字母表只包含'a'和'b'两个字符,初始符号是'S',我们应用下述规则: 于是我们可以通过把"S"重写为"aSb"(规则1),我们还可以继续应用这条规则把"aSb"重写为"aaSbb"。这个重写的过程不断重复,直到结果中只包含字母表中的字母为止。在例子中,我们可以得到S -> aSb -> aaSbb -> aababb这样的结果。由文法刻画的语言,包含了所有可以这样产生的字串,比如ba, abab, aababb, aaababbb等等。.

新!!: 編譯器編譯程式和形式文法 · 查看更多 »

編譯器

编译器(compiler),是一種電腦程式,它會將用某種程式語言寫成的原始碼(原始語言),轉換成另一種程式語言(目標語言)。 它主要的目的是將便于人编写、阅读、维护的高级计算机语言所寫作的原始碼程式,翻译为计算机能解读、运行的低阶机器语言的程序,也就是執行檔。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。源代码一般为高阶语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。 一个现代编译器的主要工作流程如下: 源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(Linker)→ 執行檔(executables), 最後打包好的檔案就可以給電腦去判讀執行了。.

新!!: 編譯器編譯程式和編譯器 · 查看更多 »

编程语言

编程语言(programming language),是用来定义计算机程序的形式語言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。 最早的编程语言是在電腦發明之前產生的,當時是用來控制及自動演奏鋼琴的動作。在電腦領域已發明了上千不同的编程語言,而且每年仍有新的编程語言誕生。很多编程語言需要用指令方式說明計算的程序,而有些编程語言則屬於宣告式編程,說明需要的結果,而不說明如何計算。 编程语言的描述一般可以分為及語義。語法是說明編程語言中,哪些符號或文字的組合方式是正確的,語義則是對於編程的解釋。有些語言是用規格文件定義,例如C語言的規格文件也是ISO標準中一部份,2011年後的版本為ISO/IEC 9899:2011,而其他55語言(像Perl)有一份主要的文件,視為是。.

新!!: 編譯器編譯程式和编程语言 · 查看更多 »

直譯器

譯器(interpreter),是一種電腦程式,能夠把高階程式語言一行一行直接轉譯執行。直譯器像是一位「中間人」,每次執行程式時都要先轉成另一種語言再作執行,因此直譯器的程式運行速度比較緩慢。它不會一次把整個程式轉譯出來,而是每轉譯一行程式敘述就立刻執行,然後再轉譯下一行,再執行,如此不停地進行下去。 直譯器的好處是它消除了編譯整個程式的負擔,程式可以拆分成多個部分來模組化,但這會讓執行時的效率打了折扣。相對地,編譯器已一次將所有原程式碼翻譯成另一種語言,如機械碼,執行時便無需再依賴編譯器或額外的程式,故而其運行速度比較快。.

新!!: 編譯器編譯程式和直譯器 · 查看更多 »

語法分析器

在计算机科学和语言学中,语法分析(syntactic analysis,也叫 parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。 语法分析器(parser)通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具(半)自动生成。.

新!!: 編譯器編譯程式和語法分析器 · 查看更多 »

语义学

语义学(Semantics,La sémantique),也作「语意学」,是一个涉及到语言学、逻辑学、计算机科学、自然语言处理、认知科学、心理学等诸多领域的一个术语。虽然各个学科之间对语义学的研究有一定的共同性,但是具体的研究方法和内容大相径庭。语义学的研究对象是自然语言的意义,这里的自然语言可以是词汇,句子,篇章等等不同级别的语言单位。但是各个领域里对语言的意义的研究目的不同:.

新!!: 編譯器編譯程式和语义学 · 查看更多 »

GNU bison

GNU bison(Bison意为犎牛;而Yacc与意为牦牛的Yak同音)是一个自由软件,用于自动生成语法分析器程序,实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新近版本中,Bison增加了对GLR语法分析算法的支持。 GNU bison基本兼容Yacc,并做了一些改进。它一般与flex一起使用。.

新!!: 編譯器編譯程式和GNU bison · 查看更多 »

Yacc

yacc(Yet Another Compiler Compiler),是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器主要是用C語言寫成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把兩部份產生出來的C程序一併編譯。yacc本來只在Unix系統上才有,但現時已普遍移植往Windows及其他平台。 yacc的输入是巴科斯范式(BNF)表达的语法规则以及语法规约的处理代码,Yacc输出的是基于表驱动的编译器,包含输入的语法规约的处理代码部分。 yacc是开发编译器的一个有用的工具,采用LALR(1)语法分析方法。 yacc最初由AT&T的Steven C. Johnson为Unix操作系统开发,后来一些兼容的程序如Berkeley Yacc,GNU bison,MKS yacc和Abraxas yacc陆续出现。它们都在原先基础上做了少许改进或者增加,但是基本概念是相同的。 由于所产生的解析器需要词法分析器配合,因此Yacc经常和词法分析器的产生器——一般就是Lex——联合使用。IEEE POSIX P1003.2标准定义了Lex和Yacc的功能和需求。.

新!!: 編譯器編譯程式和Yacc · 查看更多 »

源代码

源代码(Source code),也称源程序,是指一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现;但最常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。.

新!!: 編譯器編譯程式和源代码 · 查看更多 »

指令集架構

指令集架構(Instruction Set Architecture,縮寫為ISA),又稱指令集或指令集体系,是计算机体系结构中與程序設計有關的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中斷,異常處理以及外部I/O。指令集架構包含一系列的opcode即操作码(機器語言),以及由特定處理器执行的基本命令。 指令集体系与微架构(一套用于执行指令集的微处理器设计方法)不同。使用不同微架構的電腦可以共享一种指令集。例如,Intel的Pentium和AMD的AMD Athlon,兩者几乎採用相同版本的x86指令集体系,但是兩者在内部设计上有本质的区别。 一些虛擬機器支持基于Smalltalk,Java虛擬機,微軟的公共語言运行时虛擬機所生成的字节码,他們的指令集体系將bytecode(字节码)从作为一般手段的代码路径翻譯成本地的機器語言,并通过解译执行并不常用的代码路径,全美達以相同的方式开发了基于x86指令体系的VLIW處理器。.

新!!: 編譯器編譯程式和指令集架構 · 查看更多 »

重定向到这里:

語法分析器產生程式

传出传入
嘿!我们在Facebook上吧! »