Wiki

Clone wiki

inf225 / 2013 / Code formatting in C

Teknologier som er i bruk er språket C, git for prosjektstyring og kode management (bruker assembla, så om du har en konto der kan jeg invitere til prosjektet så du kan se framgang), og forsøk på å ikke dra inn mange andre teknologier.

Mål for prosjektet er selvfølgelig å lære, men også å se hvor raskt det er mulig å få noe slikt til - dvs ett mål som er satt er at dette skal være brukbart i realtime. Koden jeg har på nåværende tidspunkt deler hele input filen opp i "tokens" som er ting som har noen betydning for programmet og (muligens) må gjøres noe spesielt på for formateringsstadiet. "/* comment */" blir delt opp i 3 tokens - "/*" som er en spesial token som betyr start multilinje kommentar, " comment " - som er selve kommentaren, og "*/" som betyr slutt på multilinjekommentar. Alle andre ting av betydning blir også parset riktig til tokens (ex {"if", "(", "condition", ")"}). Dette går på < 1ms på nåværende tidspunkt på en ~3MiB C-fil - da det er så raskt at det ikke er mulig å måle noen fornuftig kjøretid på det.

Milestones:

  • Basic functionality
    • På dette tidspunktet vil jeg ha en fungerende kodeformaterer for språket 'C' som prototyper all funksjonalitet man vil ha for det språket
  • Advanced functionality
    • På dette stadiet vil jeg ha refaktorert all språk-spesifikk kode ut i egne biblioteker og innlasting av disse når de skal brukes
    • Det skal være klart til å legge til andre språk, og denne prosessen skal være så simpel som mulig, og la den interne motoren ta seg av det meste. Språk-spesifikke ting som legges i de forskjellige bibliotekene (pluginsene) er feks spesielle tegn i språket, regler for hva som skal ignoreres av pre-processor (I C har ikke mellomrom noen funksjonell forskjell utenom i spesielle kontekster (som i en streng), så disse kan fjernes utenom i de kontekstene), regelmotor for hva som skal gjøres med tokens (skal det være "if(cond)" eller "if ( cond )"?) etc. Det er mulig den siste biten blir splittet ut i egen bibliotekhåntering så man kan legge inn flere standarder uten å måtte kopiere resten av språk-koden
  • Goal functionality
    • Her vil jeg ha plugins for minimum 2 språk (C og Magnolia), helst flere
    • Standard-motor / dialekt motor som lar deg legge inn egne dialekter for hvordan noe i ett språk skal oppføre seg (som eksempelet over med "if(cond)" vs "if ( cond )")
    • Hastighet, hastighet, hastighet!
    • Pen, lett lesbar, C-kode. (Minimum 2/3) :)

Project log / status: * 08/11: Formatering virker, selv om det fortsatt er mange uhånterte scenarioer klarer den å formatere flere filer i prosjektet riktig. Neste steg er at den skal kunne formatere seg selv!

Updated