Skip to content

carlosmvs/PLP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coroutine - PLP Project

Sobre

Projeto parte da avaliação da disciplina de Paradigmas de Linguagens de Programação (IN1007) ministrada pelo professor doutor Augusto Sampaio no semestre 2018.1, Centro de Informática, Universidade Federal de Pernambuco (UFPE).

Equipe

Objetivo

Implementar suporte a co-rotinas assimétricas na linguagem imperativa 2. Co-rotinas permitem que a execução de um procedimento seja suspensa, seu estado salvo e a execução seja retomada a partir do estado salvo em momento posterior.

BNF

A seguintes expressões foram adicionadas a gramática da linguagem:

DeclaracaoCorotina ::= "cor" Id "(" [ ListaDeclaracaoParametro ] ")" [": Tipo"] "{" Comando "}"

ChamadaCorotina ::= "resume" Id "(" [ ListaExpressao ] ")"

InterrupcaoCorotina ::= "yield" [ Expressao ]

Retorno ::= "return" [ Expressao ]

E as seguintes alteradas:

Comando ::= Atribuicao
| ComandoDeclaracao
| While
| IfThenElse
| IO
| Comando ";" Comando
| Skip
| ChamadaProcedimento
| ChamadaCorotina
| InterrupcaoCorotina
| Retorno
  
Expressao ::= Valor | ExpUnaria | ExpBinaria | Id | ChamadaProcedimento | 
ChamadaCorotina

Declaracao ::= DeclaracaoVariavel
| DeclaracaoProcedimento
| DeclaracaoCorotina
| DeclaracaoComposta

DeclaracaoProcedimento ::= "proc" Id "(" [ ListaDeclaracaoParametro ] ")" [": Tipo"] "{" Comando "}"

Classes Auxiliares

TipoRotina
TipoCorotina

DefRotina
DefCorotina

Coroutine
InterpretadorCorotina

AmbienteCompilacaoImperativaCorotina
AmbienteExecucaoImperativaCorotina
ContextoCompilacaoImperativaCorotina
ContextoExecucaoCorotina
ContextoExecucaoImperativaCorotina
CorotinaJaDeclaradaException
CorotinaNaoDeclaradaException

ExpAbs
ExpDivisao
ExpProduto
ExpModulo

Exemplos

Generator

{
	cor fibonacci() : int{
		{
		var prev = 0,
		var curr = 1,
		var temp = 0;
		while true do
			yield curr;
			temp := prev;
			prev := curr;
			curr := prev + temp
		}
	},
	var rep = 0;
	while not rep == 5 do
		write(resume fibonacci());
		rep := rep + 1
}

Produtor/Consumidor

Exemplo adaptado do livro Java How to Program, 10th Ed. (Chap. 23 - Concurrency)

{
	var buffer = -1,
	cor produtor(){
		{
			var contador = 1;
			while not contador == 11 do
			buffer := contador;
			write("Produzido: ");
			write(buffer);
			contador := contador + 1;
			yield
		}
	},
	cor consumidor(){
		{
			var soma = 0,
			var contador = 1;
			while not contador == 11 do
				write("Consumido: ");
				write(buffer);
				soma := soma + buffer;
				contador := contador + 1;
				if contador == 11 then
					write("Total contabilizado: ");
					write(soma)
				else skip;
				yield
		}
	},
	var contador = 0;
	while not contador == 10 do
		resume produtor();
		resume consumidor();
		contador := contador + 1
}

Referências

  • IN1007 Paradigmas de Linguagens de Programação
  • Linguagem Imperativa 2
  • Barclay, A. (2009) A Language of Coroutines. The University of Bath.
  • Deitel, P., & Deitel, H. (2015). Java How to program. Prentice Hall Press.
  • Dovland, S. (2006) Liberating Coroutines: Combining Sequential and Parallel Execution. Department of Informatics, University of Oslo.
  • Helsgaun, K. (2000). Discrete Event Simulation in Java. Department of Computer Science, Roskilde University.
  • Moura, A. L.; Rodriguez, N. & Ierusalimschy, R. (2004) Coroutines in Lua. Journal of Universal Computer Science, vol. 10, no. 7, 910-925
  • Moura, A. L. D. & Ierusalimschy, R. (2009) Revisiting Coroutines ACM Trans. Program. Lang. Syst., ACM, 2009, 31, 6:1-6:31
  • Sebesta, R. W. (2015). Concepts of programming languages. Pearson Education.

About

Repositório referente ao projeto da disciplina PLP - UFPE

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages