<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="pt" lang="pt">
<head>
<title>Formalismo de Backus-Naur</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Formalismo_de_Backus-Naur"/>
<meta name="wx_page_id" content="717607"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Formalismo de Backus-Naur" id="wxsec1"><h1 class="pagetitle" id="wx1">Formalismo de Backus-Naur</h1>

<p id="wx2">A <b id="wx3">forma de Backus-Naur</b> (também conhecido como <b id="wx4">BNF</b>, <b id="wx5">formalismo de Backus-Naur</b>, <b id="wx6">forma normal de Backus</b>, ou <b id="wx7">forma de Panini-Backus</b>) é uma meta-sintaxe usada para expressar <a href="/wpt/Gram%C3%A1ticas_livres_de_contexto" title="Gramáticas livres de contexto" wx:linktype="known" wx:pagename="Gramáticas_livres_de_contexto" wx:page_id="421513" id="wx8">gramáticas livres de contexto</a>: isto é, um modo formal de descrever <a href="/wpt/Linguagem_formal" title="Linguagem formal" wx:linktype="known" wx:pagename="Linguagem_formal" wx:page_id="1176" id="wx9">linguagens formais</a>.</p>

<p id="wx10">A BNF é amplamente usada como uma <a href="/wpt/Nota%C3%A7%C3%A3o" title="Notação" wx:linktype="known" wx:pagename="Notação" wx:page_id="9556" id="wx11">notação</a> para as <a href="/wpt/Gram%C3%A1tica" title="Gramática" wx:linktype="known" wx:pagename="Gramática" wx:page_id="9698" id="wx12">gramáticas</a> de <a href="/wpt/Linguagem_de_programa%C3%A7%C3%A3o" title="Linguagem de programação" wx:linktype="known" wx:pagename="Linguagem_de_programação" wx:page_id="13352" id="wx13">linguagens de programação</a>, <a href="/wpt/Conjunto_de_instru%C3%A7%C3%B5es" title="Conjunto de instruções" wx:linktype="known" wx:pagename="Conjunto_de_instruções" wx:page_id="409569" id="wx14">conjuntos de instruções</a> e <a href="/wpt/Protocolo" title="Protocolo" wx:linktype="known" wx:pagename="Protocolo" wx:page_id="1565" id="wx15">protocolos de comunicação</a>, e também como notação para representar partes de gramáticas de <a href="/wpt/L%C3%ADnguas_naturais" title="Línguas naturais" wx:linktype="known" wx:pagename="Línguas_naturais" wx:page_id="1032645" id="wx16">linguagens naturais</a>. A maioria dos livros-texto para teoria de linguagem de programação e/ou semântica documenta a linguagem de programação em BNF.</p>

<p id="wx17">Há também variantes como a <b id="wx18">forma aumentada de Backus-Naur</b> (FABN) baseada na BNF, mas que consiste em uma sintaxe e regras de derivações próprias. O princípio norteador desta <a href="/wpt/Metalinguagem" title="Metalinguagem" wx:linktype="known" wx:pagename="Metalinguagem" wx:page_id="432708" id="wx19">metalinguagem</a> é descrever um sistema formal de uma linguagem que é um protocolo (especificação bidirecional). Ela está documentada em <a href="http://tools.ietf.org/html/rfc4234" class="external text" wx:linktype="external" rel="nofollow" id="wx20">RFC 4234</a>.</p>

<div id="wx_toc"/>

<a id="Forma_de_Backus-Naur" name="Forma_de_Backus-Naur"/>
<wx:section level="2" title="Forma de Backus-Naur" id="wxsec2"><h2 id="wx21">Forma de Backus-Naur</h2>

<a id="Vis.C3.A3o_Geral" name="Vis.C3.A3o_Geral"/>
<wx:section level="3" title="Visão Geral" id="wxsec5"><h3 id="wx22">Visão Geral</h3>

<p id="wx23">BNF foi originalmente nomeada em homenagem a <a href="/wpt/John_Backus" title="John Backus" wx:linktype="known" wx:pagename="John_Backus" wx:page_id="298596" id="wx24">John Backus</a> e também (por sugestão de <a href="/wpt/Donald_Knuth" title="Donald Knuth" wx:linktype="known" wx:pagename="Donald_Knuth" wx:page_id="18451" id="wx25">Donald Knuth</a>) a <a href="/wpt/Peter_Naur" title="Peter Naur" wx:linktype="known" wx:pagename="Peter_Naur" wx:page_id="1124654" id="wx26">Peter Naur</a>. Eles foram dois pioneiros da <a href="/wpt/Ci%C3%AAncia_da_computa%C3%A7%C3%A3o" title="Ciência da computação" wx:linktype="known" wx:pagename="Ciência_da_computação" wx:page_id="2683" id="wx27">ciência da computação</a>, especialmente na arte de <a href="/wpt/Compilador" title="Compilador" wx:linktype="known" wx:pagename="Compilador" wx:page_id="2763" id="wx28">design de compiladores</a>. A forma de Backus-Naur ou gramáticas BNF é bastante similar às regras da gramática sânscrita de <a href="/wpt/P%C4%81nini" title="Pānini" wx:linktype="known" wx:pagename="Pānini" wx:page_id="666090" id="wx29">Pānini</a> (cerca do século V a.C.), e é chamada às vezes de <b id="wx30">forma de Panini-Backus</b>. A BNF foi proposta como parte da criação das regra para o <a href="/wpt/ALGOL_60" title="ALGOL 60" wx:linktype="known" wx:pagename="ALGOL_60" wx:page_id="330616" id="wx31">Algol 60</a>.</p>

<a id="Introdu.C3.A7.C3.A3o" name="Introdu.C3.A7.C3.A3o"/>
</wx:section><wx:section level="3" title="Introdução" id="wxsec6"><h3 id="wx32">Introdução</h3>

<p id="wx33">Uma especificação BNF é um conjunto de regras de derivação, escritas como</p>

<pre id="wx34">
&lt;<a href="/wpt/S%C3%ADmbolo" title="Símbolo" wx:linktype="known" wx:pagename="Símbolo" wx:page_id="98776" id="wx35">símbolo</a>&gt; ::= &lt;expressão com símbolos&gt;
</pre>

<p id="wx36">onde &lt;<a href="/wpt/S%C3%ADmbolo" title="Símbolo" wx:linktype="known" wx:pagename="Símbolo" wx:page_id="98776" id="wx37">símbolo</a>&gt; é um não-terminal, e a <a href="/wpt/Express%C3%A3o" title="Expressão" wx:linktype="known" wx:pagename="Expressão" wx:page_id="221812" id="wx38">expressão</a> consiste em sequências de símbolos e/ou sequências separadas pela barra vertical, '|', indicando uma escolha. Esta notação indica as possibilidades de substituição para símbolo da esquerda. Símbolos que nunca aparecem no lado esquerdo são ditos terminais.</p>

<a id="Exemplo" name="Exemplo"/>
</wx:section><wx:section level="3" title="Exemplo" id="wxsec7"><h3 id="wx39">Exemplo</h3>

<p id="wx40">No exemplo, considere essa BNF possível para um endereço postal do Brasil:</p>

<pre id="wx41">
 &lt;endereço-postal&gt; ::= &lt;parte-do-nome&gt; &lt;endereço-da-rua&gt; &lt;parte-do-CEP&gt;
   &lt;parte-do-nome&gt; ::= &lt;parte-pessoal&gt; &lt;último-nome&gt; &lt;parte-opc-jr&gt; &lt;FDL&gt; 
                  | &lt;parte-pessoal&gt; &lt;parte-do-nome&gt;
   &lt;parte-pessoal&gt; ::= &lt;inicial&gt; "." | &lt;primeiro-nome&gt;
 &lt;endereço-da-rua&gt; ::= &lt;nome-da-rua&gt; &lt; número-do-ímovel&gt; &lt;num-apto-opc&gt; &lt;FDL&gt;
    &lt;parte-do-CEP&gt; ::= &lt;CEP&gt; &lt;nome-da-cidade&gt; "-" &lt;código-do-estado&gt; &lt;FDL&gt;
</pre>

<p id="wx42">Isto se traduz para o português como:</p>

<ul id="wx43">
<li id="wx44">
<p id="wx45">Um endereço postal consiste da parte-do-nome, seguido pela parte do endereço-da-rua, seguido pela parte do CEP.</p>
</li>

<li id="wx46">
<p id="wx47">A parte do nome consiste em: ou a parte-pessoal seguido pelo último nome seguido por um opcional "parte-jr" (Jr., Sr.) e o end-of-line (fim da linha), ou a parte pessoal seguido pela parte do nome (essa regra mostra o uso da recursão em FNBs, que inclui o caso das pessoas que usam o primeiro nome e o nome do meio e/ou as iniciais).</p>
</li>

<li id="wx48">
<p id="wx49">A parte-pessoal consiste de ou uma inicial seguida por um ponto ou o primeiro nome.</p>
</li>

<li id="wx50">
<p id="wx51">Um endereço da rua consiste do nome da rua, seguido pelo número do imóvel, seguido do especificador de apartamento opcional, seguido por um fim-da-linha.</p>
</li>

<li id="wx52">
<p id="wx53">A parte-do-CEP consiste do CEP, seguido pelo nome-da-cidade, por um hífen, pelo código do estado, e por um fim-da-linha.</p>
</li>
</ul>

<p id="wx54">Note que muitas coisas (tais como o formato de um primeiro nome, especificador de apartamento, ou do CEP) não são especificados aqui. Se necessário, elas podem se descritas usando regras BNF adicionais.</p>

<a id="Mais_exemplos" name="Mais_exemplos"/>
</wx:section><wx:section level="3" title="Mais exemplos" id="wxsec8"><h3 id="wx55">Mais exemplos</h3>

<p id="wx56">A sintaxe da FNB pode ser representado com uma FNB como no que se segue:</p>

<pre id="wx57">
&lt;sintaxe&gt; ::= &lt;rule&gt; | &lt;rule&gt; &lt;syntax&gt;
&lt;regra&gt; ::= &lt;espaço em branco-opc&gt; "&lt;" &lt;nome da regra&gt; "&gt;" espaço em branco-opc&gt; "::=" 
           &lt;espaço em branco-opc&gt; &lt;expressão&gt; &lt;fim da linha&gt;
&lt;espaço em branco-opc&gt; ::= " " &lt;espaço em branco-opc&gt; | ""  
&lt;expressão&gt; ::= &lt;lista&gt; | &lt;lista&gt; "|" &lt;expressão&gt;
&lt;fim da linha&gt; ::= &lt;espaço em branco-opc&gt; &lt;FDL&gt; | &lt;fim da linha&gt; &lt;fim da linha&gt;
&lt;lista&gt; ::= &lt;termo&gt; | &lt;termo&gt; &lt;espaço em branco-opc&gt; &lt;lista&gt;
&lt;termo&gt; ::= &lt;literal&gt; | "&lt;" &lt;nome da regra&gt; "&gt;"
&lt;literal&gt; ::= '"' &lt;texto&gt; '"' | "'" &lt;texto&gt; "'" 
</pre>

<p id="wx58">Isso assume que o <a href="/wpt/Espa%C3%A7o_em_branco" title="Espaço em branco" wx:linktype="known" wx:pagename="Espaço_em_branco" wx:page_id="322186" id="wx59">espaço em branco</a> não é necessário para a devida interpretação da regra. &lt;FDL&gt; é o especificador fim da linha apropriado. &lt;nome da regra&gt; e &lt;texto&gt; são substituídos com uma regra nome/rótulo ou um texto literal, respectivamente.</p>

<a id="Forma_Aumentada_de_Backus-Naur" name="Forma_Aumentada_de_Backus-Naur"/>
</wx:section></wx:section><wx:section level="2" title="Forma Aumentada de Backus-Naur" id="wxsec3"><h2 id="wx60">Forma Aumentada de Backus-Naur</h2>

<a id="Introdu.C3.A7.C3.A3o_2" name="Introdu.C3.A7.C3.A3o_2"/>
<wx:section level="3" title="Introdução" id="wxsec9"><h3 id="wx61">Introdução</h3>

<p id="wx62">Uma especificação da FABN é um conjunto de regras de derivação escrito na forma:</p>

<p id="wx63"><code id="wx64">regra = definição ; comentário CR LF</code></p>

<p id="wx65">onde <code id="wx66">regra</code> é um não-terminal com caixa sensível (letras em maiúscula ou minúsculas), a <code id="wx67">definição</code> consiste numa seqüência de símbolos que definem a regra, o <code id="wx68">comentário</code> serve para documentação e terminando com o caractere de carriage return (retornar para a posição mais à esquerda) e um line feed (indica quebra de linha).</p>

<p id="wx69">Nomes de regras não são caixa-sensíveis, logo <code id="wx70">&lt;regranome&gt;</code>, <code id="wx71">&lt;Regranome&gt;</code>, <code id="wx72">&lt;REGRANOME&gt;</code>, e <code id="wx73">&lt;rEgRaNoMe&gt;</code> se referem à mesma regra. Tais nomes consistem de uma letra seguida de letras, números ou hífens.</p>

<p id="wx74">Os sinais “&lt;” e “&gt;” não são requeridos em torno do nome da regra (como são em BNF), no entanto, podem ser usados para delimitar um nome de regra afim de discerni-lo mesmo fora de contexto.</p>

<p id="wx75">A FABN é codificada em ASCII 7-bit, em que o 8º bit mais significativo é posto em 0.</p>

<a id="Valores_terminais" name="Valores_terminais"/>
</wx:section><wx:section level="3" title="Valores terminais" id="wxsec10"><h3 id="wx76">Valores terminais</h3>

<p id="wx77">Terminais são especificados por um ou mais caracteres numéricos.</p>

<p id="wx78">Caracteres numéricos podem ser especificados com o sinal de porcentagem “<code id="wx79">%</code>” seguido pela referência à base (b = binário, d = decimal, e x = hexadecimal) seguido pelo valor ou concatenação de valores (indicado por “<code id="wx80">.</code>” ). Por exemplo um carriage return é especificado por <code id="wx81">%d13</code> em decimal ou <code id="wx82">%x0D</code> em hexadecimal. Um carriage return seguido por um line feed pode ser especificado por <code id="wx83">%d13.10</code>.</p>

<p id="wx84">Textos literais são especificados pelo uso de uma string entre aspas duplas ("), tais strings são caixa-insensíveis e o conjunto de caracteres usado é o US-ASCII. Portanto a string “abc” casa com “abc”, “Abc”, “aBc”, “abC”, “ABc”, “AbC”, “aBC”, e “ABC”. Para um casamento com sensibilidade de caixa, os caracteres deverão ser definido de forma explícita; no caso de “aBc” a definição será <code id="wx85">%d97% d66% d99</code>.</p>

<a id="Operadores" name="Operadores"/>
</wx:section><wx:section level="3" title="Operadores" id="wxsec11"><h3 id="wx86">Operadores</h3>

<a id="Espa.C3.A7o_em_branco" name="Espa.C3.A7o_em_branco"/>
<wx:section level="4" title="Espaço em branco" id="wxsec13"><h4 id="wx87">Espaço em branco</h4>

<p id="wx88">Um espaço em branco é usando para separar elementos em uma definição. Para o espaço ser reconhecido como um delimitador, ele deve ser incluído explicitamente.</p>

<a id="Concatena.C3.A7.C3.A3o" name="Concatena.C3.A7.C3.A3o"/>
</wx:section><wx:section level="4" title="Concatenação" id="wxsec14"><h4 id="wx89">Concatenação</h4>

<p id="wx90"><code id="wx91">Regra1 Regra2</code></p>

<p id="wx92">Uma regra pode ser definida listando-se uma sucessão de nomes de regras, ou seja, como uma concatenação de outras regras pré-existentes.</p>

<p id="wx93">Para casar a string “aba” as seguintes regras podem ser usadas:</p>

<ol id="wx94">
<li id="wx95"><code id="wx96">fu = %x61 ; a</code></li>

<li id="wx97"><code id="wx98">bar = %x62 ; b</code></li>

<li id="wx99"><code id="wx100">mumble = fu bar fu</code></li>
</ol>

<a id="Alterna.C3.A7.C3.A3o" name="Alterna.C3.A7.C3.A3o"/>
</wx:section><wx:section level="4" title="Alternação" id="wxsec15"><h4 id="wx101">Alternação</h4>

<p id="wx102"><code id="wx103">Regra1 / Regra2</code></p>

<p id="wx104">Uma regra pode ser definida por uma lista de regras separadas pelo caractere “/”.</p>

<p id="wx105">Ainda utilizando as regras <code id="wx106">&lt;fu&gt;</code> e a regra <code id="wx107">&lt;bar&gt;</code> a seguinte regra poderia ser construída:</p>

<ol id="wx108">
<li id="wx109"><code id="wx110">fubar = fu / bar</code></li>
</ol>

<a id="Alterna.C3.A7.C3.A3o_com_incremento" name="Alterna.C3.A7.C3.A3o_com_incremento"/>
</wx:section><wx:section level="4" title="Alternação com incremento" id="wxsec16"><h4 id="wx111">Alternação com incremento</h4>

<p id="wx112"><code id="wx113">Regra1 =/ Regra2</code></p>

<p id="wx114">Podem ser acrescentadas alternativas adicionais a uma regra pelo uso do ‘=/’ entre o nome da regra e a definição.</p>

<p id="wx115">Desta forma, a regra:</p>

<ol id="wx116">
<li id="wx117"><code id="wx118">conjregra = alt1 / alt2 / alt3 / alt4 / alt5</code></li>
</ol>

<p id="wx119">é equivalente à:</p>

<ol id="wx120">
<li id="wx121"><code id="wx122">conjregra = alt1 / alt2</code></li>

<li id="wx123"><code id="wx124">conjregra =/ alt3</code></li>

<li id="wx125"><code id="wx126">conjregra =/ alt4 / alt5</code></li>
</ol>

<a id="S.C3.A9rie_de_valores" name="S.C3.A9rie_de_valores"/>
</wx:section><wx:section level="4" title="Série de valores" id="wxsec17"><h4 id="wx127">Série de valores</h4>

<p id="wx128"><code id="wx129">%c##-##</code></p>

<p id="wx130">Uma série de valores podem ser especificados pelo uso do hífen ("<code id="wx131">-</code>").</p>

<p id="wx132">Logo, a regra:</p>

<ol id="wx133">
<li id="wx134"><code id="wx135">OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"</code></li>
</ol>

<p id="wx136">É equivalente a:</p>

<ol id="wx137">
<li id="wx138"><code id="wx139">OCTAL = %x30-37</code></li>
</ol>

<a id="Agrupamento_de_Sequ.C3.AAncias" name="Agrupamento_de_Sequ.C3.AAncias"/>
</wx:section><wx:section level="4" title="Agrupamento de Sequências" id="wxsec18"><h4 id="wx140">Agrupamento de Sequências</h4>

<p id="wx141"><code id="wx142">(Regra1 Regra2)</code></p>

<p id="wx143">Pode-se colocar elementos entre parênteses a fim de agrupar regras em uma definição.</p>

<p id="wx144">Para casar “elem fubar snafu” ou “elem tarfu snafu” usamos a seguinte regra:</p>

<ol id="wx145">
<li id="wx146"><code id="wx147">grupo = elem (fubar / tarfu) snafu</code></li>
</ol>

<p id="wx148">Para casar “elem fubar” ou “tarfu snafu” podemos construir a seguinte regra:</p>

<ol id="wx149">
<li id="wx150"><code id="wx151">grupo = elem fubar / tarfu snafu</code></li>

<li id="wx152"><code id="wx153">grupo = (elem fubar) / (tarfu snafu)</code></li>
</ol>

<a id="Repeti.C3.A7.C3.A3o_de_vari.C3.A1veis" name="Repeti.C3.A7.C3.A3o_de_vari.C3.A1veis"/>
</wx:section><wx:section level="4" title="Repetição de variáveis" id="wxsec19"><h4 id="wx154">Repetição de variáveis</h4>

<p id="wx155"><code id="wx156">n*nRegra</code></p>

<p id="wx157">Para indicar a repetição de um elemento a forma <code id="wx158">&lt;a&gt;*&lt;b&gt;elemento</code> é usada. O campo opcional <code id="wx159">&lt;a&gt;</code> se refere ao numero mínimo de elementos a ser incluído tendo por padrão 0 (zero). O segundo campo opcional <code id="wx160">&lt;b&gt;</code> se refere ao numero máximo de elementos a serem incluídos tendo infinito como padrão.</p>

<p id="wx161">Logo, usamos <code id="wx162">*elemento</code> para zero ou mais elementos, <code id="wx163">1*elemento</code> para um ou mais e <code id="wx164">4*5elementos</code> para quatro ou cinco elementos.</p>

<a id="Repeti.C3.A7.C3.A3o_especifica" name="Repeti.C3.A7.C3.A3o_especifica"/>
</wx:section><wx:section level="4" title="Repetição especifica" id="wxsec20"><h4 id="wx165">Repetição especifica</h4>

<p id="wx166"><code id="wx167">nRegra</code></p>

<p id="wx168">Usa-se a forma <code id="wx169">&lt;a&gt;elemento</code> para indicar um numero explícito de elementos, tal forma é equivalente a <code id="wx170">&lt;a&gt;*&lt;a&gt;elemento</code>.</p>

<p id="wx171">Usa-se <code id="wx172">2DIGIT</code> para adquirir dois dígitos numéricos e <code id="wx173">3DIGIT</code> para adquirir três dígitos numéricos. (Veja a definição de <code id="wx174">DIGIT</code> em ‘Regras essenciais’ e também no exemplo código postal.)</p>

<a id="Sequ.C3.AAncias_opcionais" name="Sequ.C3.AAncias_opcionais"/>
</wx:section><wx:section level="4" title="Sequências opcionais" id="wxsec21"><h4 id="wx175">Sequências opcionais</h4>

<p id="wx176"><code id="wx177">[Regra]</code></p>

<p id="wx178">Para indicar um elemento opcional as seguintes formas são equivalentes:</p>

<ol id="wx179">
<li id="wx180"><code id="wx181">[fubar snafu]</code></li>

<li id="wx182"><code id="wx183">*1(fubar snafu)</code></li>

<li id="wx184"><code id="wx185">0*1(fubar snafu)</code></li>
</ol>

<a id="Coment.C3.A1rio" name="Coment.C3.A1rio"/>
</wx:section><wx:section level="4" title="Comentário" id="wxsec22"><h4 id="wx186">Comentário</h4>

<p id="wx187"><code id="wx188">; comentário</code></p>

<p id="wx189">Usa-se ponto e virgula ("<code id="wx190">;</code>") para iniciar um comentário que perdura o resto da linha.</p>

<a id="Preced.C3.AAncia_de_operadores" name="Preced.C3.AAncia_de_operadores"/>
</wx:section><wx:section level="4" title="Precedência de operadores" id="wxsec23"><h4 id="wx191">Precedência de operadores</h4>

<p id="wx192">Segue uma lista com a precedência dos operadores descritos acima da maior para a menor precedência:</p>

<ol id="wx193">
<li id="wx194">
<p id="wx195">String, Formação de nomes;</p>
</li>

<li id="wx196">
<p id="wx197">Comentários;</p>
</li>

<li id="wx198">
<p id="wx199">Série de valores;</p>
</li>

<li id="wx200">
<p id="wx201">Repetição;</p>
</li>

<li id="wx202">
<p id="wx203">Agrupamento, Opcional;</p>
</li>

<li id="wx204">
<p id="wx205">Concatenação;</p>
</li>

<li id="wx206">
<p id="wx207">Alternação.</p>
</li>
</ol>

<p id="wx208">O uso do operador de alternação e o operador de concatenação podem ser confundidos. e recomenda-se que agrupamentos sejam usados para fazer concatenações explícitas de grupos.</p>

<a id="Regras_Essenciais" name="Regras_Essenciais"/>
</wx:section><wx:section level="4" title="Regras Essenciais" id="wxsec24"><h4 id="wx209">Regras Essenciais</h4>

<p id="wx210">Segue abaixo regras essenciais definidas por padrão na FABN</p>

<table class="wikitable" id="wx211">
<tr style="background-color: #efefef;" id="wx212">
<th id="wx213">
<p id="wx214">Regra</p>
</th>
<th id="wx215">
<p id="wx216">Definição Formal</p>
</th>
<th id="wx217">
<p id="wx218">Significado</p>
</th>
</tr>

<tr id="wx219">
<td id="wx220">
<p id="wx221">ALPHA</p>
</td>
<td id="wx222">
<p id="wx223">%x41-5A / %x61-7A</p>
</td>
<td id="wx224">
<p id="wx225">Letras ASCII em caixa alta e baixa (A-Z, a-z )</p>
</td>
</tr>

<tr id="wx226">
<td id="wx227">
<p id="wx228">DIGIT</p>
</td>
<td id="wx229">
<p id="wx230">%x30-39</p>
</td>
<td id="wx231">
<p id="wx232">Dígitos decimais (0-9)</p>
</td>
</tr>

<tr id="wx233">
<td id="wx234">
<p id="wx235">HEXDIG</p>
</td>
<td id="wx236">
<p id="wx237">DIGIT / "A" / "B" / "C" / "D" / "E" / "F"</p>
</td>
<td id="wx238">
<p id="wx239">Dígitos hexadecimais (0-9 A-F a-f )</p>
</td>
</tr>

<tr id="wx240">
<td id="wx241">
<p id="wx242">DQUOTE</p>
</td>
<td id="wx243">
<p id="wx244">%x22</p>
</td>
<td id="wx245">
<p id="wx246">Aspas duplas</p>
</td>
</tr>

<tr id="wx247">
<td id="wx248">
<p id="wx249">SP</p>
</td>
<td id="wx250">
<p id="wx251">%x20</p>
</td>
<td id="wx252">
<p id="wx253">Espaço</p>
</td>
</tr>

<tr id="wx254">
<td id="wx255">
<p id="wx256">HTAB</p>
</td>
<td id="wx257">
<p id="wx258">%x09</p>
</td>
<td id="wx259">
<p id="wx260">Tabulação</p>
</td>
</tr>

<tr id="wx261">
<td id="wx262">
<p id="wx263">WSP</p>
</td>
<td id="wx264">
<p id="wx265">SP / HTAB</p>
</td>
<td id="wx266">
<p id="wx267">Espaço e tabulação</p>
</td>
</tr>

<tr id="wx268">
<td id="wx269">
<p id="wx270">LWSP</p>
</td>
<td id="wx271">
<p id="wx272">*(WSP / CRLF WSP)</p>
</td>
<td id="wx273">
<p id="wx274">Espaço de linha em brando (nova linha)</p>
</td>
</tr>

<tr id="wx275">
<td id="wx276">
<p id="wx277">VCHAR</p>
</td>
<td id="wx278">
<p id="wx279">%x21-7E</p>
</td>
<td id="wx280">
<p id="wx281">Caractere visível (imprimível)</p>
</td>
</tr>

<tr id="wx282">
<td id="wx283">
<p id="wx284">CHAR</p>
</td>
<td id="wx285">
<p id="wx286">%x01-7F</p>
</td>
<td id="wx287">
<p id="wx288">Qualquer caractere US_ASCII 7-bit</p>
</td>
</tr>

<tr id="wx289">
<td id="wx290">
<p id="wx291">OCTET</p>
</td>
<td id="wx292">
<p id="wx293">%x00-FF</p>
</td>
<td id="wx294">
<p id="wx295">8 bits de dados</p>
</td>
</tr>

<tr id="wx296">
<td id="wx297">
<p id="wx298">CTL</p>
</td>
<td id="wx299">
<p id="wx300">%x00-1F / %x7F</p>
</td>
<td id="wx301">
<p id="wx302">Controles</p>
</td>
</tr>

<tr id="wx303">
<td id="wx304">
<p id="wx305">CR</p>
</td>
<td id="wx306">
<p id="wx307">%x0D</p>
</td>
<td id="wx308">
<p id="wx309">Carriage return</p>
</td>
</tr>

<tr id="wx310">
<td id="wx311">
<p id="wx312">LF</p>
</td>
<td id="wx313">
<p id="wx314">%x0A</p>
</td>
<td id="wx315">
<p id="wx316">Linefeed</p>
</td>
</tr>

<tr id="wx317">
<td id="wx318">
<p id="wx319">CRLF</p>
</td>
<td id="wx320">
<p id="wx321">CR LF</p>
</td>
<td id="wx322">
<p id="wx323">Nova linha no padrão da internet</p>
</td>
</tr>

<tr id="wx324">
<td id="wx325">
<p id="wx326">BIT</p>
</td>
<td id="wx327">
<p id="wx328">"0" / "1"</p>
</td>
<td id="wx329"/>
</tr>
</table>

<a id="Exemplo_2" name="Exemplo_2"/>
</wx:section><wx:section level="4" title="Exemplo" id="wxsec25"><h4 id="wx330">Exemplo</h4>

<p id="wx331">A implementação de um código-postal em FABN seria:</p>

<pre id="wx332">
<code id="wx333">endereço-postal      = parte-do-nome rua parte-do-CEP

parte-do-nome        = [parte-opc-jr] *(parte-pessoal SP) ultimo-nome [SP parte-opc-jr] ; a segunda parte opcinal se refere ao "Jr." CRLF
parte-do-nome        =/ parte-pessoal CRLF

parte-pessoal        = primeiro-nome / (inicial ".")
primeiro-nome        = *ALPHA
inicial              = ALPHA "."
ultimo-nome          = *ALPHA
parte-opc-jr         = ( "Sr." / "Jr." / 1*("I" / "V" / "X"))

rua                  = rua-nome SP numero-casa [SP apt] CRLF
apt                  = 1*4DIGIT
numero-casa          = 1*8(DIGIT / ALPHA)
rua-nome             = 1*VCHAR

parte-do-CEP         = CEP 1*2SP cidade SP "-" SP estado CRLF
cidade               = 1*(ALPHA / SP)
estado               = 2ALPHA
CEP                  = 5DIGIT "-" 3DIGIT
</code>
</pre>

<p id="wx334"/>

<a id="Ver_tamb.C3.A9m" name="Ver_tamb.C3.A9m"/>
</wx:section></wx:section></wx:section><wx:section level="2" title="Ver também" id="wxsec4"><h2 id="wx335"><wx:template id="wx_t1" pagename="Predefinição:Veja_também" page_id="63065"/>Ver também<wx:templateend start="wx_t1"/></h2>

<ul id="wx336">
<li id="wx337"><a href="/wpt/Ashtadhy%C4%81yi" title="Ashtadhyāyi" wx:linktype="known" wx:pagename="Ashtadhyāyi" wx:page_id="1482180" id="wx338">Ashtadhyāyi</a>
<p id="wx339">(tratado de gramática sânscrita com estrutura matemática)</p>
</li>

<li id="wx340"><a href="/wpt/GOLD" class="new" title="GOLD" wx:linktype="unknown" wx:pagename="GOLD" id="wx341">GOLD</a>
<p id="wx342">Analisador BNF</p>
</li>

<li id="wx343"><a href="/wpt/GNU_bison" title="GNU bison" wx:linktype="known" wx:pagename="GNU_bison" wx:page_id="1276291" id="wx344">GNU bison</a>
<p id="wx345">Versão GNU do Yacc</p>
</li>

<li id="wx346"><a href="/wpt/Yacc" class="new" title="Yacc" wx:linktype="unknown" wx:pagename="Yacc" id="wx347">Yacc</a>
<p id="wx348">Gerador de Analisador (usado com o pré-processador Lex)</p>
</li>

<li id="wx349"><a href="/wpt/Express%C3%A3o_Regular" title="Expressão Regular" wx:linktype="known" wx:pagename="Expressão_Regular" wx:page_id="3080" id="wx350">Expressão Regular</a></li>

<li id="wx351"><a href="http://www.ietf.org/rfc/rfc5234.txt" class="external" wx:linktype="external" id="wx352">RFC 5234</a><a href="http://tools.ietf.org/html/rfc5234" class="external autonumber" wx:linktype="external" rel="nofollow" id="wx353"/>
<p id="wx354">Augmented BNF for Syntax Specifications: ABNF</p>
</li>

<li id="wx355"><a href="http://www.ietf.org/rfc/rfc4234.txt" class="external" wx:linktype="external" id="wx356">RFC 4234</a>
<p id="wx357">Augmented BNF for Syntax Specifications: ABNF (Obsoleted by: <a href="http://www.ietf.org/rfc/rfc5234.txt" class="external" wx:linktype="external" id="wx358">RFC 5234</a>)</p>
</li>

<li id="wx359"><a href="http://www.ietf.org/rfc/rfc2234.txt" class="external" wx:linktype="external" id="wx360">RFC 2234</a>
<p id="wx361">Augmented BNF for Syntax Specifications: ABNF (Obsolete)</p>
</li>
</ul>

<a id="Liga.C3.A7.C3.B5es_externas" name="Liga.C3.A7.C3.B5es_externas"/>
<wx:section level="3" title="Ligações externas" id="wxsec12"><h3 id="wx362"><wx:template id="wx_t2" pagename="Predefinição:Ligações_Externas" page_id="68835"/>Ligações externas<wx:templateend start="wx_t2"/></h3>

<ul id="wx363">
<li id="wx364"><a href="http://www.lrz-muenchen.de/~bernhard/Algol-BNF.html" class="external text" wx:linktype="external" rel="nofollow" id="wx365">BNF do Algol-60</a></li>

<li id="wx366"><a href="http://compilers.iecc.com/comparch/article/93-07-017" class="external autonumber" wx:linktype="external" rel="nofollow" id="wx367"/></li>

<li id="wx368">
<p id="wx369">Artigo <i id="wx370"><a href="http://www.garshol.priv.no/download/text/bnf.html" class="external autonumber" wx:linktype="external" rel="nofollow" id="wx371"/></i> por Lars Marius Garshol.</p>
</li>

<li id="wx372"><a href="ftp://ftp.rfc-editor.org/in-notes/rfc4234.txt" class="external text" wx:linktype="external" rel="nofollow" id="wx373">RFC 4234</a></li>

<li id="wx374"><a href="http://grammatica.percederberg.net/" class="external text" wx:linktype="external" rel="nofollow" id="wx375">Grammatica Parser</a></li>

<li id="wx376"><a href="http://spirit.sourceforge.net/" class="external text" wx:linktype="external" rel="nofollow" id="wx377">Spirit Parser</a></li>
</ul>
</wx:section></wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wpt/index.php?title=Especial:Categories&amp;article=Formalismo_de_Backus-Naur" title="Especial:Categories" wx:linktype="known" wx:pagename="Especial:Categories" id="wx378">Categorias de páginas</a>: <span dir="ltr" id="wx379"><a href="/wpt/Categoria:Linguagens_formais" title="Categoria:Linguagens formais" wx:linktype="known" wx:pagename="Categoria:Linguagens_formais" wx:page_id="472378" id="wx380">Linguagens formais</a></span> | <span dir="ltr" id="wx381"><a href="/wpt/Categoria:Teoria_da_computa%C3%A7%C3%A3o" title="Categoria:Teoria da computação" wx:linktype="known" wx:pagename="Categoria:Teoria_da_computação" wx:page_id="31793" id="wx382">Teoria da computação</a></span></div>
<div id="wx_languagelinks">
Outras línguas: <a href="http://cs.wikipedia.org/wiki/Backus-Naurova_forma" class="external" wx:linktype="interwiki" wx:pagename="cs:Backus-Naurova_forma" id="wx383">Česky</a> | <a href="http://da.wikipedia.org/wiki/BNF" class="external" wx:linktype="interwiki" wx:pagename="da:BNF" id="wx384">Dansk</a> | <a href="http://de.wikipedia.org/wiki/Backus-Naur-Form" class="external" wx:linktype="interwiki" wx:pagename="de:Backus-Naur-Form" id="wx385">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form" class="external" wx:linktype="interwiki" wx:pagename="en:Backus–Naur_Form" id="wx386">English</a> | <a href="http://es.wikipedia.org/wiki/Backus-Naur_form" class="external" wx:linktype="interwiki" wx:pagename="es:Backus-Naur_form" id="wx387">Español</a> | <a href="http://fi.wikipedia.org/wiki/Backus%E2%80%93Naur-muoto" class="external" wx:linktype="interwiki" wx:pagename="fi:Backus–Naur-muoto" id="wx388">Suomi</a> | <a href="http://fr.wikipedia.org/wiki/Forme_de_Backus-Naur" class="external" wx:linktype="interwiki" wx:pagename="fr:Forme_de_Backus-Naur" id="wx389">Français</a> | <a href="http://gl.wikipedia.org/wiki/Backus-Naur_Form" class="external" wx:linktype="interwiki" wx:pagename="gl:Backus-Naur_Form" id="wx390">Galego</a> | <a href="http://hr.wikipedia.org/wiki/Backus-Naurov_oblik" class="external" wx:linktype="interwiki" wx:pagename="hr:Backus-Naurov_oblik" id="wx391">Hrvatski</a> | <a href="http://hu.wikipedia.org/wiki/Backus%E2%80%93Naur_forma" class="external" wx:linktype="interwiki" wx:pagename="hu:Backus–Naur_forma" id="wx392">Magyar</a> | <a href="http://is.wikipedia.org/wiki/BNF" class="external" wx:linktype="interwiki" wx:pagename="is:BNF" id="wx393">Íslenska</a> | <a href="http://it.wikipedia.org/wiki/Backus-Naur_Form" class="external" wx:linktype="interwiki" wx:pagename="it:Backus-Naur_Form" id="wx394">Italiano</a> | <a href="http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%82%AB%E3%82%B9%E3%83%BB%E3%83%8A%E3%82%A6%E3%82%A2%E8%A8%98%E6%B3%95" class="external" wx:linktype="interwiki" wx:pagename="ja:バッカス・ナウア記法" id="wx395">日本語</a> | <a href="http://ka.wikipedia.org/wiki/%E1%83%91%E1%83%94%E1%83%99%E1%83%A3%E1%83%A1-%E1%83%9C%E1%83%90%E1%83%A3%E1%83%A0%E1%83%98%E1%83%A1_%E1%83%A4%E1%83%9D%E1%83%A0%E1%83%9B%E1%83%90%E1%83%9A%E1%83%98%E1%83%96%E1%83%9B%E1%83%98" class="external" wx:linktype="interwiki" wx:pagename="ka:ბეკუს-ნაურის_ფორმალიზმი" id="wx396">ქართული</a> | <a href="http://ko.wikipedia.org/wiki/%EB%B0%94%EC%BF%A0%EC%8A%A4-%EB%82%98%EC%9A%B0%EB%A5%B4_%ED%91%9C%EA%B8%B0%EB%B2%95" class="external" wx:linktype="interwiki" wx:pagename="ko:바쿠스-나우르_표기법" id="wx397">한국어</a> | <a href="http://nl.wikipedia.org/wiki/Backus-Naur-formalisme" class="external" wx:linktype="interwiki" wx:pagename="nl:Backus-Naur-formalisme" id="wx398">Nederlands</a> | <a href="http://pl.wikipedia.org/wiki/Notacja_BNF" class="external" wx:linktype="interwiki" wx:pagename="pl:Notacja_BNF" id="wx399">Polski</a> | <a href="http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D0%B0_%D0%91%D1%8D%D0%BA%D1%83%D1%81%D0%B0_%E2%80%94_%D0%9D%D0%B0%D1%83%D1%80%D0%B0" class="external" wx:linktype="interwiki" wx:pagename="ru:Форма_Бэкуса_—_Наура" id="wx400">Русский</a> | <a href="http://sr.wikipedia.org/wiki/%D0%91%D0%B5%D0%BA%D1%83%D1%81-%D0%9D%D0%B0%D1%83%D1%80%D0%BE%D0%B2%D0%B0_%D1%84%D0%BE%D1%80%D0%BC%D0%B0" class="external" wx:linktype="interwiki" wx:pagename="sr:Бекус-Наурова_форма" id="wx401">Српски / Srpski</a> | <a href="http://sv.wikipedia.org/wiki/Backus-Naur-form" class="external" wx:linktype="interwiki" wx:pagename="sv:Backus-Naur-form" id="wx402">Svenska</a> | <a href="http://ta.wikipedia.org/wiki/%E0%AE%AA%E0%AF%87%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AE%B8%E0%AF%8D-%E0%AE%A8%E0%AE%BE%E0%AE%B0%E0%AF%8D_%E0%AE%AE%E0%AF%81%E0%AE%B1%E0%AF%88" class="external" wx:linktype="interwiki" wx:pagename="ta:பேக்கஸ்-நார்_முறை" id="wx403">தமிழ்</a> | <a href="http://tr.wikipedia.org/wiki/Backus-Naur_form" class="external" wx:linktype="interwiki" wx:pagename="tr:Backus-Naur_form" id="wx404">Türkçe</a> | <a href="http://uk.wikipedia.org/wiki/%D0%9D%D0%BE%D1%82%D0%B0%D1%86%D1%96%D1%8F_%D0%91%D0%B5%D0%BA%D1%83%D1%81%D0%B0-%D0%9D%D0%B0%D1%83%D1%80%D0%B0" class="external" wx:linktype="interwiki" wx:pagename="uk:Нотація_Бекуса-Наура" id="wx405">Українська</a> | <a href="http://zh.wikipedia.org/wiki/%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F" class="external" wx:linktype="interwiki" wx:pagename="zh:巴科斯范式" id="wx406">中文</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name=""/></wx:templatearguments>
<wx:templatearguments for="wx_t2"><wx:argument name=""/></wx:templatearguments>
</html>
