Come appare un diagramma del flusso di controllo con molte funzioni (annidate)

1

Da quello che posso ricordare i Control-Flow Graphs per i quali ho visto le immagini sono state per lo più di singole funzioni. Quindi fondamentalmente solo affermazioni con forse il looping. Ma mi chiedo che aspetto avrà un grafico del flusso di controllo per una funzione, che può fare riferimento a funzioni annidate, che possono fare riferimento ad altre funzioni annidate, ecc.

Ad esempio, ecco un insieme di funzioni:

function a(x) {
  var m = b(x)
  var n = c(x)
  return m + n
}

function b(x) {
  var m = d(x)
  var n = e(x)
  return m * n
}

function c(x) {
  var m = d(x)
  var n = e(x)
  return m - n
}

function d(x) {
  var i = x
  var o
  while (i--) {
    if (i % 2 == 0) {
      o += (x * 2)
    } else {
      o -= (x * 3)
    }
  }
  return o
}

function e(x) {
  var i = x
  var o
  while (i--) {
    if (i % 3 == 0) {
      o += (x * 3)
    } else {
      o -= (x + 3)
    }
  }
  return o
}

Chiedendosi come sarebbe un diagramma di flusso di controllo, o forse solo la parte di nidificazione per iniziare.

                       a(x)
            ___________|___________
            |                      |
      var m = b(x)           var n = c(x)
              |                      |
              ?                      ?

Sperando di farlo senza incorporare le funzioni, che è solo un artefatto delle funzioni di esempio scelte.

    
posta Lance Pollard 20.07.2018 - 11:28
fonte

1 risposta

1

Non è possibile tracciare un grafico di flusso di controllo accurato (CFG) che includa chiamate di funzione: una funzione può essere chiamata da più posizioni. L'obiettivo del limite del flusso di controllo che rappresenta un ritorno dipende dall'indirizzo di ritorno che è dati di runtime. Se dovessimo disegnare un bordo per ogni sito di chiamata staticamente possibile, il grafico conterrà percorsi che non sono effettivamente possibili, ad es. una chiamata che ritorna a un callsite completamente diverso.

Invece, l'equivalente utile è un call graph che illustra le dipendenze tra le funzioni.

    
risposta data 20.07.2018 - 12:35
fonte

Leggi altre domande sui tag