Eu estava pensando outro dia, e me ocorreu que todos os programas de computador parecem representáveis como um gráfico (uma árvore de sintaxe abstrata, por exemplo) ou, uma vez que expressões comuns são combinadas, um gráfico de sintaxe abstrata.
Ocorreu-me que talvez qualquer programa de computador possa ser representado como um desses gráficos + semântica de avaliação anexada a ele. Estou curioso para saber se isso é universalmente verdadeiro para uma máquina de turing (suponho que você possa obter um gráfico potencialmente infinito, mas isso é matemática, então tudo bem). Eu tenho pensado nisso e em muitas coisas, como sistemas de tipos fortes e que se encaixam bem nessa abstração (eles impõem restrições estruturais no gráfico). Você pode até considerar o sistema de tipos como seu próprio programa e representá- lo como um gráfico diferente + semântica de avaliação operando no gráfico do programa ...
Apenas curioso se essa é uma equivalência conhecida ou não.
Respostas:
Não sei se é uma equivalência particularmente conhecida, mas é bastante simples quando você pensa sobre isso.
Sabe-se que as máquinas de Turing são equivalentes ao cálculo Lambda (sem tipagem). A tese de Church-Turing propõe que essa é a forma mais poderosa de computação.
O Cálculo Lambda é um sistema de reescrita de termos definido sintaticamente. Essencialmente, é uma linguagem de programação muito simples. Portanto, ele pode ser analisado em uma árvore de sintaxe abstrata (gráfico).
Então nós temos:
Isso significa que todo programa de computador pode ser representado como uma árvore de sintaxe abstrata do Lambda Calculus.
Essas árvores podem não ter muito em termos de propriedades interessantes. Por exemplo, eles definitivamente não são únicos, ou seja, duas árvores diferentes podem executar cálculos idênticos.
fonte
Sim, existe uma estreita conexão entre gráficos e programação em algumas áreas. a maneira mais simples de visualizar isso é como loops, ramificações ou pontos de entrada de sub-rotina no código como destinos em um gráfico direcionado. Veja também
fluxogramas
programação de fluxo de dados
programação baseada em fluxo
programação visual
veja também Linguagens de programação visual cs.se
fonte