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

巴科斯范式

指数 巴科斯范式

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

19 关系: ALGOLALGOL 60上下文无关文法乔姆斯基范式形式文法彼得·諾爾約翰·巴科斯編譯器編譯程式统一资源名称終結符與非終結符解析表达文法黑田范式FASTA格式Λ演算Visual C++名字修饰Yacc格雷巴赫标准式扩展巴科斯范式扩充巴科斯范式

ALGOL

ALGOL,名稱源自演算法語言(ALGOrithmic Language)的縮寫,是一族指令式編程語言,發展於1950年代中期,對許多其它程式語言產生了重大影響。计算机协会在教科書及學術文章採用此語言做為描述演算法的標準語法超過三十年。 由大多數近代程式語言皆使用類似ALGOL的語法來看,ALGOL可與差不多同時期的FORTRAN、LISP及COBOL並列為四大最有影響力的高階語言。ALGOL被設計用來避免FORTRAN中一些已知的問題,最終引領了許多其它程式語言的興起,包括PL/I、Simula、BCPL、B、Pascal及C。 ALGOL引入了程式碼區間,並用begin⋯end來分隔。它是第一個利用詞法作用域實作巢狀函式的語言,也是第一個注重形式語言定義的語言,並在ALGOL 60報告中引入了巴科斯範式來作為設計語言形式文法的原則。 ALGOL主要有三種規格,以初次發表的年份命名:.

新!!: 巴科斯范式和ALGOL · 查看更多 »

ALGOL 60

ALGOL 60(源自ALGOrithmic Language 1960的縮寫),一種程式語言,是ALGOL語言家族中的成員之一。根據ALGOL 58的基礎,它在1960年被創造,並影響到其後的CPL、BCPL、B語言、Pascal、Simula、C語言,在程式語言中有著很大的影響力。 它的後繼者是ALGOL 68與ALGOL W。.

新!!: 巴科斯范式和ALGOL 60 · 查看更多 »

上下文无关文法

上下文无关文法(context-free grammar,縮寫為CFG),在计算机科学中,若一个形式文法 G.

新!!: 巴科斯范式和上下文无关文法 · 查看更多 »

乔姆斯基范式

在计算机科学中,一个形式文法是 Chomsky 范式的,当且仅当所有产生规则都有如下形式: 这里的 A, B 和 C 是非终结符,α 是终结符(表示常量值的符号),S 是开始符号,而 ε 是空串。还有,B 和 C 都不可以是开始符号。 所有的 Chomsky 范式的文法都是上下文无关,反过来,所有上下文无关文法都可以有效的变换成等价的 Chomsky 范式的文法。 除了(在文法可能生成空串的时候包括的)可选规则 S → ε 是例外,Chomsky 范式的文法的所有规则都是扩张的,就是说在字符串的整个导出过程中,每个终结符和非终结符的字符串比起前面导出的字符串要么同样长度要么多出一个元素。长度 n 的字符串的导出总是精确的 2n-1 步长。 Chomsky 范式得名于诺姆·乔姆斯基,他是发明乔姆斯基层级的美国语言学家。.

新!!: 巴科斯范式和乔姆斯基范式 · 查看更多 »

形式文法

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

新!!: 巴科斯范式和形式文法 · 查看更多 »

彼得·諾爾

彼得·諾爾(Peter Naur,),生於丹麥腓特烈斯贝,天文學家與計算機科學家,曾任哥本哈根大學教授。他開發了BNF範式,改進了程式語言。也曾投入 ALGOL 60的開發工作,在軟體工程及軟體架構領域中都有著重要貢獻。為2005年圖靈獎得主,也是目前唯一一位丹麥籍的得主。.

新!!: 巴科斯范式和彼得·諾爾 · 查看更多 »

約翰·巴科斯

約翰·華納·巴科斯(John Warner Backus,),美國計算機科學家,是早期高階語言(High-level Language)FORTRAN的發明小組組長。他提出了BNF(用來定義形式語言語法的記號法),發明了概念及實踐該概念的。為1977年圖靈獎得主。.

新!!: 巴科斯范式和約翰·巴科斯 · 查看更多 »

編譯器編譯程式

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

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

统一资源名称

统一资源名称(Uniform Resource Name,或URN)是统一资源标识(URI)的历史名字,它使用作为URI scheme。 1997年的RFC 2141定义了URN,期望为资源提供持久的、位置无关的标识方式,并允许简单地将多个命名空间映射到单个URN命名空间。这样一个URI的存在并不意味着被标识的资源一定是可用的,但它仍然需要保持全局唯一和持久,即使资源已经不存在了或变得不可用。 自从2005年RFC 3986发布,这一术语的使用已被限制更少的“URI”取代。这是W3C和IETF联合组成的工作组所提议的。URN和URL都已经是URI的一种,而且特定情况下URI可能同时拥有名字(URN)和位置(URL)。 在1990年,URN作为一个元数据框架,原本被期望和URL、URC()一起组成一个第三方互联网信息架构。然而URC一直停留在理论阶段,随之更晚出现的其他技术(例如资源描述框架)取代了它们。.

新!!: 巴科斯范式和统一资源名称 · 查看更多 »

終結符與非終結符

終結符和非終結符在電腦科學和語言學的领域是用來指定推導規則的元素。在某個形式語法之中,終結符和非終結符是兩個不交的集合。.

新!!: 巴科斯范式和終結符與非終結符 · 查看更多 »

解析表达文法

在计算机科学中解析表达文法,简称PEG,是一种解析形式文法。这种文法用一个识别字符串的规则的集合来描述某种形式语言。解析表达文法2004年由布莱恩·福特引入, 以纯公式的形式的展现递归下降解析器的基础语法,对这个具体的解析器可能会采用的实现方法不做任何限定。解析表达文法看起来与正则表达式和巴科斯范式的上下文无关文法(CFG)很像,但是表达的意思不同。 和CFG不同的是,PEG不能有;解析一个字符串的时候,这个字符串只产生一个确定的语法分析树。据推测,存在上下文无关语言,不能用PEG处理,但尚未得到证实。 这个特性使得PEG更适合计算机语言的解析,对于一般的CFG算法(如)的性能可以与之比拟的自然语言就不是很合适。.

新!!: 巴科斯范式和解析表达文法 · 查看更多 »

黑田范式

在计算机科学中,形式文法是 Kuroda 范式的,当且仅当所有产生规则都有如下形式: 这里的 A, B, C 和 D 是非终结符而 α 是终结符。 所有 Kuroda 范式的文法都是单调的,因此生成上下文有关语言。反过来说,所有不生成空串的上下文有关语言都可以被 Kuroda 范式的文法所生成。.

新!!: 巴科斯范式和黑田范式 · 查看更多 »

FASTA格式

在生物信息学中,FASTA格式是一种用于记录核酸序列或肽序列的文本格式,其中的核酸或氨基酸均以单个字母编码呈现。该格式同时还允许在序列之前定义名称和编写注释。这一格式最初由软件包定义,但现今已是生物信息学领域的一项标准。 FASTA简明的格式降低了序列操纵和分析的难度,令序列可被文本处理工具和诸如Python、Ruby和Perl等脚本语言处理。.

新!!: 巴科斯范式和FASTA格式 · 查看更多 »

Λ演算

λ演算(英語:lambda calculus,λ-calculus)是一套從數學邏輯中發展,以變數綁定和替換的規則,來研究函式如何抽象化定義、函式如何被應用以及遞迴的形式系統。它由數學家阿隆佐·邱奇在20世紀30年代首次發表。Lambda演算作為一種廣泛用途的計算模型,可以清晰地定義什麼是一個可計算函式,而任何可計算函式都能以這種形式表達和求值,它能模擬單一磁帶图灵机的計算過程;儘管如此,Lambda演算強調的是變換規則的運用,而非實現它們的具體機器。 Lambda演算可比擬是最根本的編程語言,它包括了一條變換規則(變數替換)和一條將函式抽象化定義的方式。因此普遍公認是一種更接近軟體而非硬體的方式。對函數式編程語言造成很大影響,比如Lisp、ML语言和Haskell语言。在1936年邱奇利用λ演算給出了對於判定性問題(Entscheidungsproblem)的否定:關於兩個lambda運算式是否等價的命題,無法由一個「通用的演算法」判斷,這是不可判定效能夠證明的頭一個問題,甚至還在停机问题之先。 Lambda演算包括了建構lambda項,和對lambda項執行歸約的操作。在最簡單的lambda演算中,只使用以下的規則來建構lambda項: 產生了諸如:(λx.λy.(λz.(λx.zx)(λy.zy))(x y)的表達式。如果表達式是明確而沒有歧義的,則括號可以省略。對於某些應用,其中可能包括了邏輯和數學的常量以及相關操作。 本文讨论的是邱奇的“无类型lambda演算”,此后,已经研究出来了一些有类型lambda演算。.

新!!: 巴科斯范式和Λ演算 · 查看更多 »

Visual C++名字修饰

Name mangling或者Decorated Name是指程序设计语言中具有存储性质的对象的名字被编译器改写,以适合编译器、链接器(linker)、汇编器(assembler)使用。所谓的具有存储性质的对象,即lvalue对象,是指要实际占用内存空间、有内存地址的那些实体对象,例如:变量(variables)、函数、函数指针等。C++中的纯虚函数作为特例也属于这一范畴。而数据类型(data type)就不属于具有存储性质的对象。Name mangling如何翻译成中文,尚无广泛接受的译法。可翻译作改名或名字修饰(name decorating)。 对于支持重载(overload)的程序设计语言,name mangling是必需的因而具有特别重要意义。C++允许函数重载 int foo(int i); void foo(char c); C++也允许变量名称在不同限定(qualifier)下同名: std::cout; 因此C++的编译器必须给这些函数及变量不同的名字以供程序编译链接、载入时的内部辨别使用。 C++的编译器可大略分为Windows平台上的Microsoft Visual C++与类Unix平台上的GNU CC/g++两大类,分别成了各自操作系统环境下的业界工业标准。例如,Windows平台上的Intel C++ Compiler(ICC)与Digital Mars C++,都与Visual C++保持了二进制兼容(Application Binary Interface, ABI)。而Linux平台上的Intel C++ Compiler(ICC)与HP aC++,都与GCC 3.x/4.x做到二进制兼容。GCC是开源产品,它的内部实现机制是公开的;而Visual C++不公开它内部实现细节,因此在name mangling上并无详尽的正式文档,Visual C++ name mangling的细节属于hacker行为。 一般情况下,编程者不需要知道C/C++函数的修饰名字。但是,如果在汇编源程序或者内联汇编中引用了C/C++函数,就必须使用其正确的修饰名字。.

新!!: 巴科斯范式和Visual C++名字修饰 · 查看更多 »

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 · 查看更多 »

格雷巴赫标准式

在计算机科学中,声称一个上下文无关文法是Greibach 标准式(范式)(GNF)的意味着所有的产生规则都有如下形式: 或 这里的 A 是非终结符,α 是终结符,X 是不包括开始符号的非终结符的(可能为空)的序列,S 是开始符号,而 ε 是空串。 可观察出这种文法没有左递归。 所有上下文无关文法口可以被转换成等价的 Greibach 范式的文法。(某些定义不认可第二种形式的规则,在这种情况下能生成空串的上下文无关文法不能被如此转换。)这可以被用来证明所有上下文无关语言可以被非确定下推自动机所接受。 给定 GNF 的一个文法和长度为 n 的符合这个文法的一个可导出的字符串,任何自顶向下分析器将在深度 n 停机。 Greibach 范式得名于 Sheila Greibach。.

新!!: 巴科斯范式和格雷巴赫标准式 · 查看更多 »

扩展巴科斯范式

扩展巴科斯-瑙尔范式(EBNF, Extended Backus–Naur Form)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法(metalanguage)符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种扩展。 它最初由尼克劳斯·维尔特开发,最常用的 EBNF 变体由标准,特别是 ISO-14977 所定义。.

新!!: 巴科斯范式和扩展巴科斯范式 · 查看更多 »

扩充巴科斯范式

在计算机科学中,扩充巴科斯-瑙尔范式(ABNF)是一种基于巴科斯-瑙尔范式(BNF)的元语言,但它有自己的语法和派生规则。ABNF的原动原则是描述一种作为双向通信协议的语言的形式系统。它是由("STD 68",大小写样式按照原文)定义的,也就是RFC 5234,经常用于互联网工程任务组(IETF)通信协议的定义语言。 RFC 5234取代了RFC 4234 (取代了RFC 2234).

新!!: 巴科斯范式和扩充巴科斯范式 · 查看更多 »

重定向到这里:

巴克斯-诺尔范式巴科斯-瑙尔范式

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