• 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

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

 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

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

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

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,