Toon posts:

[Perl] c code parsing

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik wil uit een een hoop c code bepaalde functies filteren met alle bijbehorende parameters en waarden. Is perl een goede taal om deze c code parser in te schrijven? Zoja waar kan ik over c code parsing iets vinden?

Alvast bedankt!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Perl is een goede taal om met strings om te gaan en er allerlei rommel uit te extracten. Voor al door de regular expressions / pattern matching. Op google.com kun je iets vinden over c code parsing.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Perl vast natuurlijk heel grapppig, reguliere expressies zijn heel handig en pattern matching kent fantastische toepassingen, maar imho moet je zo geen C code gaan parsen...

Programmeertalen als C worden beschreven met behulp van een context-vrije grammatica, wat een uitgebreider concept is dan pure reguliere expressies. Vanuit een context-vrije grammatica voor C kan je met behulp van een parser-generator een parser genereren voor C. Deze parser kan je gebruiken om C code te parsen en het resultaat van dit parsen (de parse-tree) te vertalen in een abstract syntax tree. Deze abstract syntax tree komt overeen met productie-regels ui de context vrije grammatica voor de taal C.

Je kan je herschrijvingen daarna implementeren door deze boom te transformeren. Het resultaat van de transformatie kan je pretty-printen naar de syntax voor C en je bent klaar :) .

Gelukkig bestaat C al erg lang en daarom zijn er al vele grammatica's, pretty-printers en andere meta-tools. Als je wat voelt voor een wat professionelere, meer zekere, aanpak kan ik bepaalde onderdelen nog wel wat verder uitleggen als het echt hokus-pocus voor je is. Ook kan ik eventueel nog wel wat tools aanbevelen.

Het kan sowieso geen kwaad om eens iets lezen over context-vrije grammatica's, parsers en code-generators. Reguliere expressies (voor zover je het systeem van Perl nog reguliere expressies mag noemen) zijn heel leuk, maar niet bedoeld voor het interpreteren van teksten in een taal als C, Java, PHP en dergelijke. Daarvoor heb je gewoon goede tools nodig :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Misschien kan je beter naar de reden kijken waarom je wilt filteren.

Als je bijv af en toe bij het compileren een deel van de functionaliteit uitgeschakeld wilt hebben kan je beter met #ifdef DEFINEDDINGES etc gaan werken daarmee kan je, imho, veel netter stukken code met de precompiler van je c-compiler uitschakelen.

(compilatie met gcc is dan: gcc -DDEFINEDDINGES als je het aan wilt hebben, of bijv een waarde er aan wilt geven gcc -DDEFINEDDINGES=5 etc)