» »

Analiza "programske kode"

Analiza "programske kode"

antonija ::

Upam da nisem zgresil foruma.

Imam en izziv, in sicer: Imam skupek enacb (operacij), ki se uporabljajo v enem precej specificnem software-u kot user-programmable del programa. V tem skupku enacb so take, ki so v bistvu samo vnosna polja, kot tudi take, ki operirajo z drugimi enacbami. Vse ksupaj je ene vrste koda, ampak ne vem ce spada v katero od uradnih sintax (meni izgleda kot proprietary zadeva).

Format podatkov je v dveh stolpcih: prvi stolpec je ime enacbe (ki se lahko uporabi kot argument v drugih enacbah), drugi stolpec pa enacba. Celoten seznam je dolg preko 100k vrstic.

Kar bi jaz rabil je orodje, s katerim bi:
1. poiskal vse povezave med posameznimi enacbami (kje vse se ime iz prvega stolpca pojavlja v drugem stolpcu + nadaljevanje "drevesa", ce se "nova" enacba spet uporablja naprej)
2. koncni rezultat za vsako enacbo spravil v neko prezentabilno obliko (diagram workflowa oz. ekvivalent) iz katere je ljudem hitro razvidno kje vse se posamezna enacba uporablja; nekaksen drevesni prikaz
3. v koncnem rezultatu poiskati vse duplikate drevesnih prikazov in obdrzati samo unikate

A obstaja kaj takega?
Statistically 3 out of 4 involved usually enjoy gang-bang experience.

secops ::

Seveda verjetno ne obstaja ker gre za custom rešitev. Če pa lahko ta seznam enačb izvoziš v neko txt datoteko pa si lahko z Pythonom poljubno formatiraš.

antonija ::

Iskanje kot tako bi mi se slo, to bi verjetno ze excel lahko preprical da naredi.
Izdelava "dreves" in graficni prikaz je pa dalec od tega kar znam/zmorem.

Bi si mogoce lahko pomagal z orodji za analizo kode? Ta bi verjetno morala znati poiskati kje vse pojavljalo funkcije in spremenljivke, in potem podatke predstaviti v cloveku prijazni obliki?
Statistically 3 out of 4 involved usually enjoy gang-bang experience.

Mavrik ::

A orodje graphviz / dot poznaš? To je orodje kjer v datoteko napišeš povezave (" A - B ", "B - C", "A -C") in potem glede na te povezave zriše drevo.

Če znaš spremeniti tvojo tabelo v seznam kjer imaš "Funkcija - Druga funkcija z uporabo" pare, ti bo dot zrisal cel graf povezav.

https://www.tonyballantyne.com/graphs.h...
The truth is rarely pure and never simple.

predi ::

Če hočeš operacije dejansko analizirat, potrebuješ gramatiko, ki opisuje njihovo sintakso. Potem boš potreboval kakšen parser generator framework, na primer ANTLR4, katerega rezultat bo parser na podlagi gramatike, ki ti bo omogočal sprehajanje po parse drevesu posamezne operacije - od tod dobiš povezave med operacijami. Potem šele na vrsto pridejo orodja za vizualizacijo teh povezav.

antonija ::

Graphviz izgleda super in na prvi uc bi ga celo znal uporabit :) Hvala za nasvet.
Statistically 3 out of 4 involved usually enjoy gang-bang experience.

Zimonem ::

predi je izjavil:

Če hočeš operacije dejansko analizirat, potrebuješ gramatiko, ki opisuje njihovo sintakso. Potem boš potreboval kakšen parser generator framework, na primer ANTLR4, katerega rezultat bo parser na podlagi gramatike, ki ti bo omogočal sprehajanje po parse drevesu posamezne operacije - od tod dobiš povezave med operacijami. Potem šele na vrsto pridejo orodja za vizualizacijo teh povezav.

Mislim da gre za rahel overhead in zadevo komot razseka z regularnimi izrazi brez, se muči z razčlenjevalnikom. Če so vsi izrazi približno v takšni obliki kot jo je podal. Se pravi sklici in osnovna aritmetika.

antonija ::

Pozdravljeni, ko mi je koncno uspelo pridobit vse povezave med elemnti, sem naletel na en problem z graphvizom:
Moja DOT navodila izgledajo nekako takole:

digraph G {
	subgraph cluster_0 {
		a0->a1->a2->a3;
		b0->a1;
	}

	subgraph cluster_1 {
		b0->b1->b2->b3;
	}
}


To naredi dva clusterja, pri katerih se ena povezava (b0->b1) "stegne" med oba clusterja, element "b0" pa je zlistan samo v prvem clusterju, ne pa tudi v drugem. Tega pa jaz nocem. Hocem da se povezave, definirane znotraj clusterja, izrisejo samo znotraj doticnega clusterja, in da so vsi elementi, definirani znotraj posameznega clusterja, tudi tam prikazani, ceprav se ponavljajo med razlicnimi clusterji.

V dokumentaicji nisem nasel atributa s katerim bi to lahko nastavil. Pozna kdo resitev?
Statistically 3 out of 4 involved usually enjoy gang-bang experience.

Zgodovina sprememb…

  • spremenilo: antonija ()

al_z ::

Kaj pa če bi vrstico b0->a1 premaknil v blok cluster1? Potem b0 ne bi bil v prvem clusteru, samo v drugem.

antonija ::

Ampak b0 element je v obeh clustrih in jaz bi ga hotel v obeh grafih, v vsakem s svojo povezavo, brez "kriznih" povezav.

Trenutno sem problem "resil" tako, da loceno generiram grafe (brez subgraphov) in jih kasneje zdruzim v en dokument.
Statistically 3 out of 4 involved usually enjoy gang-bang experience.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Nova različica podatkovne baze PostgreSQL 9.5 prinaša obilico novosti (strani: 1 2 )

Oddelek: Novice / Ostala programska oprema
5717678 (14544) McAjvar
»

Elipsa

Oddelek: Šola
5642 (559) hmm23
»

Office 2010 prihaja maja

Oddelek: Novice / Pisarniški paketi
389284 (7018) mtosev
»

Matematika/Logika - teoretični pristop

Oddelek: Šola
103633 (3356) Tim Burton
»

Cluster parallel computing (Kako?)

Oddelek: Operacijski sistemi
81222 (1071) ješ

Več podobnih tem