# 9.1. Meta Linguagem para linguagens onde espaços em branco são irrelevantes: ! 1. Linguagem = * ( ?Regra & "#" & Comentário ) # A descrição de uma linguagem é uma seqüência de regras e comentários. Toda regra deve ter um Comentário! 2. Regra = ? ( Número & "." ) & Nome de Elemento & "=" & Definição # As regras da linguagem podem ser numeradas por conveniência. Todos os elementos cujos nomes forem citados na linguagem devem ser definidos em uma e somente uma regra! 3. Comentário = ?* @ - "!" & "!" # O único caracter que não pode aparecer em um comentário é o ponto de exclamação, que é empregado para terminar o comentário! 4. Número = * "0".."9" # Números são seqüências de algarismos decimais! 5. Nome de Elemento = Letra ?* 254 Não separador # Os nomes de elementos devem começar por uma letra para evitar que sejam confundidos com outros símbolos. Alguns sinas de pontuação ( ",", ";", ".", etc. ) podem ser usados em nomes. Até o ponto de exclamação, que não pode aparecer em comentários, é permitido em nomes de elementos! 6. Definição = Composição ?* ( "|" & Composição ) # Em uma definição podem haver várias composições alternativas! 7. Letra = "A" .. "Z" | "a" .. "z" # As letras minúsculas são consideradas equivalentes às correspondentes maiúsculas. Essa foi uma decisão arbitrária! 8. Não separador = @ - ":" - "=" - "#" - "|" - ")" - "&" - "?" - "*" # Os separadores são caracteres que podem empregados depois de nomes de elementos! 9. Composição = Elemento | ? Elemento * ( Tipo de Composição & Elemento ) # Uma composição é uma concatenação de elementos! 10. Elemento = ( Nome de Elemento | Elemento Terminal | "(" & Definição & ")" ) ? ( ":" Comentário ) # É possível acrescentar um comentário após cada elemento. O uso de parêntesis permite a criação de regras mais elaboradas. O abuso pode criar textos de difícil compreensão! 11. Tipo de Composição = "&" | "?" | "*" ? Número | "?*" ? Número # O & indica que o elemento seguinte é obrigatório. O ? indica que o elemento seguinte é opcional. O * indica que o elemento seguinte pode ser repetido tantas vezes quantas forem necessárias, O ?* indica que o elemento seguinte é opcional, mas pode ser repetido tantas vezes quantas forem necessárias. O número que pode aparecer imediatamente após ao caracter * indica o numero máximo de repetições! 12. Elemento Terminal = * ( Cadeia de caracteres | Intervalo de caracteres | Caracter de conjunto | "%" ) # O caracter % representa fim de linha! 13. Cadeia de Caracteres = """ @ - % ?* @ - % - """ & """ # Somente o primeiro caracter de uma cadeia pode ser aspas. Portanto """ indica uma cadeia formada por apenas um caracter que será aspas. Quando é necessário incluir uma aspas no meio de uma cadeia, só existe um recurso: Terminar a cadeia e começar outra. Para colocar a frase É bem "SIMPLES" em uma cadeia é necessário empregar a forma "É bem """SIMPLES"""", ou seja, cada aspas do texto original aparece como três aspas dentro da cadeia! 14. Intervalo de Caracteres = Caracter ? ( ".." & Caracter ) # Indica que qualquer caracter que pertença ao intervalo é aceitável. Os caracteres são considerados ordenados segundo a ordem da tabela ASCII. Os intervalos X..Y e Y..X, onde X e Y são caracteres, são considerados equivalentes! 15. Caracter = """ & @ - % & """ | "%" # Um caracter é uma cadeia de tamanho unitário ou o símbolo %, que representa o fim de linha! 16. Caracter de conjunto = "@" * ( "-" & Caracter ) # Indica que qualquer caracter com exceção dos citados pode ser usado. O "@" representa o conjunto de todos os possíveis caracteres ( "all" )!