FL: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Sopoed (discussão | contribs)
OS2Warp (discussão | contribs)
m Revertidas edições por Sopoed, para a última versão por OS2Warp
Linha 1:
{{desambiguação}}
== O que é e como surgiu? ==
 
'''FL''' pode ser:
No âmbito da unidade curricular de Linguagens para Sistemas Embebidos, inserida na unidade de especialização de Tecnologias de Computadores do Mestrado Integrado em Engenharia Electrónica Industrial e Computadores, foi nos proposto projectar e implementar a nossa própria linguagem para sistemas embebidos. Como o nosso curso está bastante voltado para os microcontroladores e, como o primeiro microcontrolador estudado foi o 8051, começamos a basear a nossa linguagem em torno deste micro. Surgiu então a ideia de construirmos uma linguagem baseada em fluxogramas, que permita a transcrição de fluxogramas para uma linguagem de alto nível, que gera código C, que por sua vez permite a programação do micro 8051. Foi com base nestas ideias que surgiu a linguagem FLμ (Flow Language to μProcessors).
* [[Flórida]], um dos 50 [[Estado]]s dos [[Estados Unidos da América]].
* [[FL Studio]], [[software]] de produção musical.
* [[Freelancer]], um profissional auto-empregado
 
[[Categoria:Desambiguação]]
== Objectivos ==
 
[[de:FL]]
O principal objectivo do aparecimento da linguagem FLμ é permitir a familiarização para iniciantes com o mundo dos processadores, permitindo um rápido desenvolvimento de aplicações para o micro 8051, podendo o FLμ ser utilizado como ferramenta pedagógica, por exemplo para a unidade curricular de Microprocessadores I leccionada no 2.º ano do nosso curso. Para iniciantes em microprocessadores um programa em assembly poderá ser um desafio complicado. A fácil interpretação/desenvolvimento de fluxogramas e a difícil especificação do código em assembly, podem desmotivar os utilizadores menos experientes. Nesta altura surge o FLμ com o objectivo de apoiar a aprendizagem e o rápido desenvolvimento de programas, permitindo a geração de código C.
[[el:FL]]
 
[[en:FL]]
== Tutorial ==
[[fi:Fl]]
[[fr:FL]]
Este tutorial pretende dar a conhecer o modo de funcionamento da nossa linguagem, assim como obter o máximo partido das suas potencialidades. Para que melhor se perceba esta linguagem, iremos dar alguns exemplos, desde o mais simples até ao mais complexo, onde através de um fluxograma obtemos a correspondência directa na linguagem FLμ, que permite geração de código para programação do microcontrolador 8051. Antes de se apresentar os exemplos, irá ser feita uma apresentação dos principais passos a tomar para a construção correcta de um programa.
[[it:FL]]
 
[[ja:FL]]
1 - Definição do bloco principal de código
[[ko:FL]]
 
[[ksh:FL (Watt ėßß datt?)]]
Um fluxograma tem um fluxo de execução que é percorrido através das setas que ligam os vários blocos. Na linguagem FLμ, o fluxo de execução é declarado entre o INIT e o END. Olhado para o exemplo apresentado anteriormente, poderemos verificar que dentro do INIT, a ordem de declaração dos blocos segue a ordem dos blocos que se encontram no fluxograma.
[[nl:FL]]
 
[[sl:FL]]
[[Imagem:Fluxograma-flu.JPG‎]]
[[sv:FL]]
 
Olhando para o fluxograma e para o código, verifica-se que a tradução é directa. Olhando para a linguagem verifica-se que foram atribuídos nomes aos blocos do fluxograma. Os nomes vão ser a identificação dos blocos que posteriormente irão ser declarados antes do INIT. A designação dos blocos declarados antes do INIT é feita da seguinte forma:
 
[[Imagem:Fluxograma-flu2.JPG‎]]
 
No caso de surgir um bloco de decisão, deve-se dar um nome ao bloco e em seguida colocar um „?‟.
 
2 - Definição do código dos blocos
 
Nos fluxogramas, dentro dos blocos, são efectuadas acções. A passagem dessas acções para FLμ é bastante simples. Dentro do INIT já foi declarado a ordem do fluxo de execução, atribuindo nomes a cada bloco, que posteriormente irão invocar “pedaços” de código. Para se declararem as acções deve-se criar uma estrutura de código antes do INIT em que o cabeçalho indica o tipo de bloco e o respectivo identificador. Como se pode facilmente ver pelo código seguinte dentro do INIT temos um p1. Este p1 por sua vez vai invocar o PROCESS p1. Entre o PROCESS p1 e o END (terminador de cada bloco de código) declaram-se as acções.
 
[[Imagem:Fluxograma-flu3.JPG]]
 
3 - Definição e utilização das Palavras-Chave
 
Na linguagem FLμ existem inúmeras palavras-chave. Cada uma das palavras-chave tem uma função distinta. Além das explicadas anteriormente, temos as seguintes que também têm bastante utilização na linguagem FLμ. No manual de referência da linguagem já são abordadas algumas palavras-chave, no entanto, convém referenciar aqui algumas que não foram tão bem frisadas.
 
GOTO – Permite saltar para uma zona de código dentro do INT.
EX: GOTO p4 , o fluxo de execução salta para o local do código que identifique o nome p4, tanto pode ser um PROCESS, um IO, etc.
 
CALL – Permite chamar uma rotina identificada pelo name.
EX: CALL name, o fluxo de execução salta para um local do código fora do INIT. Salta para um bloco de código com o cabeçalho ROUTINE name.
 
TRUE/FALSE – Permite decidir qual o caminho a seguir, no fluxo de execução do código, depois do bloco de decisão ter validado ou não a expressão pretendida. Caso a expressão seja verdadeira o fluxo de execução de código segue o caminho dado pela palavra-chave TRUE, caso contrário, segue o caminho do FALSE.
EX:
d1?
TRUE GOTO p4
FALSE GOTO d2
 
Como se pode ver por esta estrutura de código, o fluxo de execução do código é executado através da palavra-chave GOTO.
 
== Exemplo ==
 
Este primeiro exemplo é muito simples. Pretende-se efectuar a soma de dois números e em seguida pretende-se calcular a média desses números. Uma solução possível para este exemplo é o seguinte:
 
[[Imagem:Fluxograma-flu4.JPG]]
 
Como se pode ver pelo fluxograma e pela implementação da linguagem FLμ, a tradução é quase directa. No entanto, neste exemplo explicamos algumas regras importantes que já foram referidas e que se aplicam a todos os outros exemplos. Num fluxograma, o início e o fim de execução dão-se através de um bloco terminal, por exemplo com a palavra Início e Fim. Olhando para a implementação, a declaração da inicialização do fluxo de código dá-se através da palavra INIT e o seu fim dá-se através da palavra END. Entre esta duas palavras declaram-se, os blocos, mediante a ordem de execução do fluxograma. A declaração da estrutura destes blocos é efectuada antes do bloco de código, que se encontra entre as palavras INIT e END. O modo de funcionamento é muito semelhante à declaração e chamada de funções na linguagem C. Analisando o código, verifica-se que entre o INIT e o END é necessário declarar os seguintes identificadores: “variaveis”, “soma” e “media”. Estes identificadores vão ser utilizados para invocar os blocos de código pretendidos. Assim sendo, o identificador “variaveis” invoca “BLOCK variaveis”, local onde se declaram todas as variáveis necessárias para o correcto funcionamento do código. Para que se confirme o fim do bloco é necessário declarar-se a palavra END no fim. Esta regra é aplicada no fim de todos os tipos de blocos, quer seja de processamento, decisão ou de entrada/saída, etc. Por sua vez o identificador “soma” invoca o “BLOCK soma”, local onde se utilizam as variáveis a e b que vão ser somadas e em seguida coloca o resultado na variável total. Seguindo a ordem de execução surge o “BLOCK media”. Neste caso utilizamos a variável media_tot, na qual utiliza o resultado obtido no bloco anterior e divide por 2 para que a média final seja obtida. A próxima palavra que surge na ordem de execução é a palavra END e, assim se dá a conclusão do nosso programa.
 
== Referências ==
 
*[[ANTLR]]
*[[Eclipse (IDE)]]
*[[JAVA]]
*[[Compiladores]]
*[[Linguagens de Programação]]