Obs: Ótimo, apesar de ser uma modelagem das redes de Petri e não exatamente uma linguagem. Eu tenho um artigo não publicado que considera tokens como objetos. Cada transição só aceita tokens de um certo tipo (ou subtipos). O título do artigo é "Object-Oriented Petri Nets". Achei estranho o texto dizer que "arcos podem ser definidos em tempo de execução". Daria uma confusão enorme. Não consegui entender a notação utilizada na linguagem. Nota: 1,0 Leandro dos Santos A linguagem se baseia numa rede de petri. Um software nessa linguagem é programado escrevendo as transições, os lugares e ligando elas através de arcos, como numa rede de petri. Deve exisitir um estado principal que o inicio. Arcos de transições levam a lugares, arcos de lugares levam a transições. Não tem variáveis, não tem comandos para estruturas de seleção (if/else, switch), nem estruturas de repetição (for, while, do/while). A própria estrutura da rede de petri possibilita seleção e repetição. As transições da rede são os blocos de comandos. Toda transição recebe um único parametro (como numa função ou procedimento) que é o estado do lugar anterior. A transição da linguagem também contém o conjunto de arcos para os próximos lugares. Os lugares demarcam estados (são quase como variáveis), como as transições também contém um conjunto de arcos para os próximas transições. Os lugares guardam um valor (estado) e contém um teste de disparo. Cada transição faz uma transformação levando de um ou mais estados a um mais outros estados (obs: podem ser os mesmos). Numa analogia as linguagens estruturadas, seria parecido com alterar o valor de uma variável. Pode existir mais de um arco saindo de um lugar ou transição, essa característica possibilita programação concorrente. Quando se atinge um lugar, a execução de outros caminhos que levam a este estado é interrompida, isso termina a execução paralela. Os arcos podem ser definidos em tempo de execução e os lugares podem ser criados em tempo de execução. Os lugares guardam valores que podem ser tipos primitivos ou tipos definidos pelo programador. É fracamente tipada, não é necessário definir o tipo esperado por uma transição ou lugar. Os tipos primitivos da linguagem não fogem dos tipos primitivos das linguagens estruturadas. São inteiro, ponto flutuante, caracter e string. É possivel definir novos tipos através de estruturas. Exemplos de estruturas simples para a linguagem: Simbologia: (x) , lugar, x é o teste de disparo, pode ser vazio (executa sempre) # , transição | - \ / > <, arcos estrutura de seleção # --> (1) /-> (<0) \-> (2) # --> (0) \-> (>0) estrutura de repetição ( ) --> # --> (True) ^ | | v (False) concorrencia ( ) --> # # --> ( ) \-> # \-> ( ) (pode ser condicional) transformações ( ) --> # -- > ( ) ( ) ---^ (uma transformação envolvendo dois valores)