( uid_15483 | 2018. 03. 15., cs – 20:12 )

Nem tudom pontosan mi a celod ezzel az elemzessel, de en szemely szerint kicsit mas iranyba mennek. Tapasztalatom szerint az AST-t nem celszeru kilapitani, ha mar egyszer van egy szep fa strukturad, a lapitas rovid tavon problemakhoz fog vezetni. Ennek a ket kodnak az AST-je kulonbozik ugyan, de ugyan arra a szamsorra fog fordulni:


if (condition) {
  a = 1;
}
b = 2;

// AST(?):

If
  Var
  Block
    Assign
      Var
      Literal
Assign
  Var
  Literal

if (condition) {
  a = 1;
  b = 2;
}

// AST(?):

If
  Var
  Block 
    Assign
      Var
      Literal
    Assign
      Var
      Literal

Mindketto kodja valami ilyesmi lesz az algoritmusoddal: 0 1 2 3 1 4 3 1 4
Ugye az AST nyelvtan fuggo, ugyhogy nem biztos hogy pont ezt kapod, de a lenyeg az, hogy fontos tudni a block vege hol van. Mivel ezt figyelmen kivul hagyod, lenyegesen kulonbozo kodokat tekinthet ugyan annak a neuralis halod.

Tapasztalatom szerint jobb megkozelites, ha az AST-t egy grafnak tekinted es azt reprezentalod valahogy. Peldaul a melyseget hozzacsapod prefixkent, vagy ilyesmi. Pl a fenti esetben ez ilyen kodsorokat fog eredmenyezni:
1. eset: 0-0 1-1 1-2 2-3 3-1 3-4 0-3 1-1 1-4
2. eset: 0-0 1-1 1-2 2-3 3-1 3-4 2-3 3-1 3-4

Tovabba (megint csak attol fuggoen, hogy mi a celod) fontos lehet, hogy milyen valtozokon tortenik a muvelet. Peldaul ha a neuralis haloddal fel akarod ismertetni a buborek rendezes implementaciojat vagy ilyesmi, akkor ugyan a valtozok neve nem szamit, de az igen, hogy ugyan az a valtozo van hivatkozva a masodik, nyolcadik meg tizedik utasitasban is. Ilyen esetben erdemes az AST-ben levo valtozo/fuggvenynev referenciakat feloldani, es egysegesiteni, igy ket kod osszehasonlitasakor az elnevezesek nem fognak szamitani. Itt figyelni kell arra is, hogy pl az "i" valtozo gyakori ciklusvaltozo ugyhogy a nevfeloldasnal szamit a scope.

Ha a nevfeloldas is megvan, akkor mar eleg kozel vagy ahhoz hogy legyen egy teljes control flowd a programrol (az exceptionok es egyeb implicit ugrasok hianyoznak).

Szerintem ez az, amivel csodakat lehetne tenni ha van egy jol betanitott neuralis halod :)

(automatizalt forraskod elemzessel foglalkozok; neuralis halokat csak tavolrol lattam)