• Nenhum resultado encontrado

1 Descrição da Linguagem LM

N/A
N/A
Protected

Academic year: 2021

Share "1 Descrição da Linguagem LM"

Copied!
8
0
0

Texto

(1)

Descri¸c˜

ao Formal da Linguagem LM

Leandro Motta Barros

Dezembro de 02001

1

Descri¸

ao da Linguagem LM

LM ´e uma linguagem de programa¸c˜ao funcional. LM n˜ao ´e ML. LM significa “Leandro Motta”, em homenagem a seu criador. Ou “L´ıngua Morta”, j´a que todas as palavras reservadas s˜ao derivadas do Latim [1] [2].

A seguir ´e apresentada a gram´atica de LM, juntamente com informa¸c˜oes sobre a semˆantica da linguagem.

1.1 Elementos B´asicos

A defini¸c˜ao de d´ıgito n˜ao apresenta nenhuma surpresa. Na defini¸c˜ao de letra, apenas conv´em notar que o s´ımbolo underscore ( ) ´e considerado uma letra. hD´ıgitoi → 0 .. . hD´ıgitoi → 9 hLetrai → a .. . hLetrai → z hLetrai → A .. . hLetrai → Z hLetrai →

A partir destas defini¸c˜oes ´e poss´ıvel especificar um inteiro literal e um iden-tificador. Um inteiro literal ´e simplesmente uma seq¨uˆencia de um ou mais d´ıgitos:

(2)

hInteiro Literali → hD´ıgitoi

hInteiro Literali → hD´ıgitoi hInteiro Literali

Um identificador ´e uma seq¨uencia de uma ou mais letras e d´ıgitos que deve come¸car por uma letra.

hIdentificadori → hLetrai

hIdentificadori → hIdentificadori hLetrai hIdentificadori → hIdentificadori hNumeroi

A linguagem LM considera que espa¸cos (representados por “ ”), tabula¸c˜oes (tabs) e quebras de linha (eols) s˜ao equivalentes.

hEspa¸coi → hEspa¸coi → eol hEspa¸coi → tab

hEspa¸cosi → hEspa¸coi hEspa¸cos Opc.i hEspa¸cos Opc.i → ε

hEspa¸cos Opc.i → hEspa¸coi hEspa¸cos Opc.i

Express˜oes inteiras s˜ao express˜oes LM que, quando avaliadas, resultam em um n´umero inteiro. Uma express˜ao inteira pode ser um inteiro literal, um identificador, ou uma chamada de fun¸c˜ao.

hExpress˜ao Inteirai → hInteiro Literali hExpress˜ao Inteirai → hIdentificadori

hExpress˜ao Inteirai → hChamada de Fun¸c˜aoi

1.2 Fun¸c˜oes

A seguir s˜ao apresentadas regras referentes a fun¸c˜oes. Fun¸c˜oes em LM podem ou n˜ao receber parˆametros.

1.2.1 Defini¸c˜ao de fun¸c˜oes

Uma fun¸c˜ao LM ´e definida atrav´es da palavra reservada definire. O corpo de uma fun¸c˜ao ´e composto de exatamente uma chamada de fun¸c˜ao. S´o seria ´

util permitir mais de uma chamada se elas pudessem causar efeitos colate-rais (como atribui¸c˜oes). Mas este n˜ao ´e o caso, pois LM ´e uma linguagem funcional.

(3)

hDefini¸c˜ao de Fun¸c˜aoi → definire hEspa¸cosi hIdentificadori hEspa¸cos Opc.i ( hEspa¸cos Opc.i hParˆametros Formaisi

hEspa¸cos Opc.i ) hEspa¸cos Opc.i hChamada de Fun¸c˜aoi

hParˆametros Formaisi → ε

hParˆametros Formaisi → hParˆametros Formais0i hParˆametros Formais0i → hIdentificadori

hParˆametros Formais0i → hIdentificadori hEspa¸cos Opc.i , hEspa¸cos Opc.i hParˆametros Formais0i

1.2.2 Chamadas de fun¸c˜ao

Chamadas de fun¸c˜oes definidas pelo usu´ario s˜ao feitas conforme as regras mostradas a seguir. Regras para chamadas de fun¸c˜oes pr´e-definidas s˜ao dis-cutidas na se¸c˜ao 1.2.3.

hChamada de Fun¸c˜aoi → hIdentificadori hEspa¸cos Opc.i ( hEspa¸cos Opc.i hParˆametros Reaisi hEspa¸cos Opc.i )

hParˆametros Reaisi → ε

hParˆametros Reaisi → hParˆametros Reais0i hParˆametros Reais0i → hExpress˜ao Inteirai

hParˆametros Reais0i → hExpress˜ao Inteirai hEspa¸cos Opc.i , hEspa¸cos Opc.i hParˆametros Reais0i

´

E interessante notar que as fun¸c˜oes definidas pelo usu´ario podem receber ou-tras fun¸c˜oes definidas pelo usu´ario como parˆametro, poishExpress˜ao Inteirai pode ser transformada em um identificador. Isto ´e sintaticamente correto, apesar de que uma fun¸c˜ao n˜ao ´e realmente uma express˜ao inteira.

1.2.3 Fun¸c˜oes pr´e-definidas

LM possui um conjunto de fun¸c˜oes pr´e-definidas (FPDs) que s˜ao discutidas nas pr´oximas se¸c˜oes. Chamadas a fun¸c˜oes pr´e-definidas podem ser divididas em grupos de acordo com o n´umero de parˆametros que recebem.

hChamada FPD 1 i → hNome FPD 1 i hEspa¸cos Opc.i ( hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i )

(4)

hChamada FPD 2 i → hNome FPD 2 i hEspa¸cos Opc.i ( hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i , hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i )

hChamada FPD 2+i → hNome FPD 2+i hEspa¸cos Opc.i ( hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i ,

hEspa¸cos Opc.i hParˆametros Reais0i hEspa¸cos Opc.i )

hChamada FPD 3 i → hNome FPD 3 i hEspa¸cos Opc.i ( hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i , hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i , hEspa¸cos Opc.i hExpress˜ao Inteirai hEspa¸cos Opc.i )

As chamadas de fun¸c˜oes pr´e-definidas n˜ao s˜ao amb´ıguas: a regra a ser apli-cada pode ser facilmente deduzida a partir do nome da fun¸c˜ao, que ´e o primeiro s´ımbolo que aparece no lado direito de todas as regras deste grupo. Evidentemente, chamadas de fun¸c˜oes pr´e-definidas tamb´em s˜ao chamadas de fun¸c˜ao:

hChamada de Fun¸c˜aoi → hChamada FPD 1 i hChamada de Fun¸c˜aoi → hChamada FPD 2 i hChamada de Fun¸c˜aoi → hChamada FPD 2+i hChamada de Fun¸c˜aoi → hChamada FPD 3 i

1.3 Aritm´etica de Inteiros

LM possui cinco fun¸c˜oes pr´e-definidas que possibilitam a execu¸c˜ao das ope-ra¸c˜oes aritm´eticas b´asicas com n´umeros inteiros. Os parˆametros destas fun-¸

c˜oes devem ser express˜oes inteiras.

As fun¸c˜oes adicere e multiplicare recebem como parˆametros dois ou mais valores e retornam, respectivamente, a soma e o produto dos parˆametros. hNome FPD 2+i → adicere

hNome FPD 2+i → multiplicare

As outras fun¸c˜oes para aritm´etica de inteiros admitem apenas dois parˆ a-metros. deducere realiza a opera¸c˜ao de subtra¸c˜ao; didere efetua a divis˜ao inteira; e relicus ´e usada para obter o resto da divis˜ao inteira.

hNome FPD 2 i → deducere hNome FPD 2 i → didere

(5)

hNome FPD 2 i → relicus

1.4 Compara¸c˜oes

V´arias fun¸c˜oes de LM permitem realizar compara¸c˜oes: superus (maior que), intra (menor que), aequalis (igual), alius (diferente), superusaequalis (igual ou maior que) e intraaequalis (igual ou menor que)1.

hNome FPD 2 i → superus hNome FPD 2 i → intra hNome FPD 2 i → aequalis hNome FPD 2 i → alius hNome FPD 2 i → superusaequalis hNome FPD 2 i → intraaequalis

Todas estas fun¸c˜oes admitem dois parˆametros, que devem ser express˜oes inteiras. A chamada de fun¸c˜ao “superus (a, b)” retorna 1 se a > b e 0 caso contr´ario. As outras fun¸c˜oes seguem o mesmo padr˜ao.

1.5 Opera¸c˜oes L´ogicas

Em LM o n´umero zero ´e a ´unica express˜ao considerada falsa. Qualquer outra express˜ao ´e considerada verdadeira.

Trˆes opera¸c˜oes l´ogicas s˜ao suportadas por LM. A opera¸c˜ao l´ogica e ´e reali-zada pela fun¸c˜ao et. A opera¸c˜ao ou ´e feita pela fun¸c˜ao vel. E a opera¸c˜ao n˜ao´e efetuada pela fun¸c˜ao nec.

et e vel admitem dois ou mais parˆametros e sua semˆantica ´e a esperada: et retorna 1 caso todos os seus parˆametros sejam verdadeiros (diferentes de zero) e 0 caso contr´ario; vel retorna 0 se todos os seus parˆametros fo-rem falsos (iguais a zero) e 1 caso contr´ario. A avalia¸c˜ao dos parˆametros ´e “curto-circuitada”, ou seja, eles s˜ao avaliados apenas at´e o ponto em que seja poss´ıvel obter o valor de retorno da fun¸c˜ao.

hNome FPD 2+i → et hNome FPD 2+i → vel

Apenas um parˆametro pode (e deve) ser passado para a fun¸c˜ao nec. Se o

1

Segundo [1], em Latim existe uma palavra, dumtaxat, que pode ter dois significados totalmente contr´arios: “n˜ao maior que” ou “n˜ao menor que”. N˜ao imagino como algu´em possa formar uma frase com um termo desses. . .

(6)

parˆametro for verdadeiro, nec retorna 0; se for falso, retorna 1. hNome FPD 1 i → nec

1.6 Testes Condicionais

Testes condicionais podem ser feitos atrav´es da fun¸c˜ao pr´e-definida si, que deve receber trˆes express˜oes inteiras como parˆametros.

hNome FPD 3 i → si

A semˆantica da fun¸c˜ao si ´e a seguinte: se a avalia¸c˜ao do primeiro parˆ ame-tro resultar em um valor diferente de zero (verdadeiro), ent˜ao o segundo parˆametro ´e avaliado e seu valor retornado. Sen˜ao, o terceiro parˆametro ´e avaliado e seu valor retornado.

1.7 Programa

Finalmente, um programa LM ´e uma seq¨uˆencia de uma ou mais defini¸c˜oes de fun¸c˜oes possivelmente separadas por espa¸cos. A execu¸c˜ao de um programa consiste na avalia¸c˜ao da ´ultima fun¸c˜ao definida.

hProgramai → hEspa¸cos Opc.i hDefini¸c˜ao de Fun¸c˜aoi hEspa¸cos Opc.i hProgramai → hEspa¸cos Opc.i hDefini¸c˜ao de Fun¸c˜aoi hProgramai

2

Altera¸

oes na Gram´

atica

Esta se¸c˜ao apresenta altera¸c˜oes em algumas regras da gram´atica, que buscam torn´a-la adequada para a transforma¸c˜ao em um parser. As regras que n˜ao apresentam problemas n˜ao s˜ao mencionadas.

2.1 Inteiros Literais

As regras que definem inteiros literais podem ser fatoradas: hInteiro Literali → hD´ıgitoi hInteiro Literal0i

hInteiro Literal0i → ε

(7)

2.2 Identificadores

Originalmente as regras que definiam identificadores possu´ıam recurs˜ao `a esquerda. Ela foi eliminada, dando origem `as seguintes regras:

hIdentificadori → hLetrai hIdentificador0i hIdentificador0i → ε

hIdentificador0i → hLetrai hIdentificador0i hIdentificador0i → hNumeroi hIdentificador0i

2.3 Parˆametros

As regras que definem listas de parˆametros (formais e reais) podem ser fatoradas. Para parˆametros formais temos:

hParˆametros Formaisi → ε

hParˆametros Formaisi → hParˆametros Formais0i

hParˆametros Formais0i → hIdentificadori hParˆametros Formais00i hParˆametros Formais00i → ε

hParˆametros Formais00i → hEspa¸cos Opc.i , hEspa¸cos Opc.i hParˆametros Formais0i

E, similarmente, para parˆametros reais: hParˆametros Reaisi → ε

hParˆametros Reaisi → hParˆametros Reais0i

hParˆametros Reais0i → hExpress˜ao Inteirai hParˆametros Reais00i

hParˆametros Reais00i → ε

hParˆametros Reais00i → hEspa¸cos Opc.i , hEspa¸cos Opc.i hParˆametros Reais0i

2.4 Express˜oes Inteiras

H´a um problema com as regras apresentadas para express˜oes inteiras: se o primeiro s´ımbolo da express˜ao inteira for uma letra, ser´a imposs´ıvel descobrir se o que est´a sendo lido ´e um identificador ou uma chamada de fun¸c˜ao definida pelo usu´ario. Para corrigir este problema as regras que definem

(8)

uma express˜ao inteira foram substitu´ıdas. hExpress˜ao Inteirai → hInteiro Literali hExpress˜ao Inteirai → hChamada FPD 1 i hExpress˜ao Inteirai → hChamada FPD 2 i hExpress˜ao Inteirai → hChamada FPD 2+i hExpress˜ao Inteirai → hChamada FPD 3 i

Estas regras s˜ao suficientes para o caso de o primeiro s´ımbolo lido ser um d´ıgito ou o nome de uma fun¸c˜ao pr´e-definida. Mas, como o primeiro s´ımbolo lido pode ser uma letra (ou seja, o in´ıcio de um identificador), novas regras s˜ao necess´arias:

hExpress˜ao Inteirai → hIdentificadori hExpress˜ao Inteira0i hExpress˜ao Inteira0i → ε

hExpress˜ao Inteira0i → hEspa¸cos Opc.i ( hEspa¸cos Opc.i

hParˆametros Reaisi hEspa¸cos Opc.i )

2.5 Programa

´

E poss´ıvel fatorar as regras que definem um programa:

hProgramai → hEspa¸cos Opc.i hDefini¸c˜ao de Fun¸c˜aoi hPrograma0i hPrograma0i → hEspa¸cos Opc.i

hPrograma0i → hProgramai

Referˆ

encias

[1] English to Latin. http://cawley.archives.nd.edu/cgi-bin/ lookdown.pl.

[2] Latin Word List. http://kufacts.cc.ukans.edu/ftp/pub/history/ Europe/Medieval/aids/latwords.html.

Referências

Documentos relacionados

Depois do colchão montado, é retirado a etiqueta (kanban) do PE e entregue ao costureiro para anexá-la ao produto. O PE junto com o carrinho é entregue à pessoa responsável

As empresas abrangidas pela presente Norma Coletiva descontarão somente dos seus empregados associados ao sindicato profissional, unicamente no mês de agosto de 2015,

Essa linguagem feita para os sentidos deve antes de mais nada tratar de satisfazê-los. Isso não a impede de em seguida desenvolver todas as suas consequências intelectuais

levar a que a sua avaliação técnica seja incorreta, isto acontece porque o nível de dificuldade das questões colocadas não esta alinhado com o nível de competência e experiência

Then, through multiplanar studies, safety zones were found for insert- ing screw on the lateral mass, following the parameters: anterior height (distance between upper

Dentre a equipe de profissionais que estão aptos à composição do PGRSS, posso inferir o quão importante é a participação do enfermeiro nas etapas de tal programa, tal como

Usu´ ario pode desenvolver seu pr´ oprio modelo para a dinˆ amica. intra-n´ o Como uma fun¸ c˜ ao

 Na campanha de período seco, as variações na qualidade da água foram definidas pela presença de matéria orgânica no curso de água e pela poluição