srcML

srcML
Utvecklare Michael L. Collard Jonathan I. Maletic
Skrivet i C, C++, Java
Licens GPL
Hemsida www .srcml .org

srcML (source ML) är en dokumentorienterad XML-representation av källkod. Den skapades i ett samarbete mellan Michael L. Collard och Jonathan I. Maletic . Förkortningen, srcML, är en förkortning för Source Markup Language. srcML lindar källkod (text) med information från abstrakt syntaxträd eller AST (taggar) i ett enda XML-dokument. All originaltext bevaras så att det ursprungliga källkodsdokumentet kan återskapas från srcML-markeringen. Det enda undantaget är möjligheten till nylinjenormalisering.

Syftet med srcML är att ge full tillgång till källkoden på lexikal, dokumentär, strukturell och syntaktisk nivå. Formatet ger också enkelt stöd för faktaextraktion och transformation. Det stöds av srcML-verktygslådan som underhålls på srcML- webbplatsen och har visat sig utföra skalbar, lättviktsextraktion och transformation.

srcML verktygslåda

srcML-verktygssatsen består av kommandoradsprogrammet srcml, som översätter från källkod till srcML när en kodfil tillhandahålls på kommandoraden eller översätter från srcML till källkod när ett srcml-arkiv tillhandahålls på kommandoraden. Programmet stöder också direkta frågor och transformationer av srcML-arkiv med hjälp av verktyg som XPath, XSLT och RELAXNG. srcML-verktygssatsen underhålls aktivt och stöder för närvarande C, C++, C# och Java.

srcML-format

srcML-formatet består av all text från den ursprungliga källkodsfilen plus XML-taggar. Specifikt är texten insvept med srcML-element som indikerar kodens syntaktiska struktur. Kort sagt, detta identifierar explicit alla syntaktiska strukturer i koden.

Taggarna som används i srcML listas nedan tillsammans med vilken kategori de faller inom.

Kategori srcML-element
Fil/projekt enhet
Påstående asm, block, break, case, comment, condition, constraint, continue, decl, decl_stmt, default, do else empty_stmt, enum, expr, expr_stmt, extern, for, goto, if, incr, index, init, label, macro, name, namespace, range, requires, switch, template, then, type, typedef, using, while
Funktion/metod argument, argument_list, call, function, function_decl, param, parameter_list, return, specificator
Klass class, class_decl, constructor, constructor_decl, destructor, destructor_decl, friend, member_list, private, protected, public, super
Struktur och Union struct, struct_decl, union, union_decl
Undantag fånga, kasta, kasta, prova
C-förprocessor cpp:define, cpp:direktiv, cpp:elif, cpp:endif, cpp:error, cpp:file, cpp:if, cpp:ifdef, cpp:ifndef, cpp:include, cpp:line, cpp:pragma, cpp: undef
K&R C krparam, krparameter_list
Java utökar, slutligen, implementerar, importerar, paketerar
Extra uppmärkning lit:literal, typ:modifierare, op:operator
Felsök markör, läge, tolka
Övrigt fly

srcML använder XML-namnrymder. Nedan finns en lista över prefixet som används för att beteckna varje namnområde och själva namnområdena.

Prefix Namnutrymme
src http://www.srcml.org/srcML/src
cpp http://www.srcml.org/srcML/cpp
pos http://www.srcml.org/srcML/position
belyst http://www.srcml.org/srcML/literal
fela http://www.srcml.org/srcML/srcerr

Obs: för ett srcML-arkiv kommer hela projektet att finnas i ett enda rotenhetselement, och varje enskild fil kommer att finnas som ett enhetselement i rotenhetselementet.

Konvertering av en enda fil

Följande visar hur srcml kan användas på enstaka filer.

Följande exempel konverterar C++-filen main.cpp till srcML-filen main.cpp.xml:

srcml main.cpp -o main.cpp.xml

Följande kommando extraherar källkoden från filen main.cpp.xml och placerar den i C++-filen main.cpp:

srcml main.cpp.xml -o main.cpp

Projektkonvertering

Följande visar hur src2srcml och srcml2src kan användas med ett helt projekt:

Följande exempel konverterar projektet 'project' till srcML-filen project.xml

srcml project -o project.xml

Följande kommando extraherar källkodsfilerna från filen project.xml och placerar den i katalogprojektet:

srcml —to-dir project project.xml

Programtransformation med srcML

srcML tillåter användning av de flesta om inte alla nuvarande XML API:er och verktyg för att skriva transformationer. Det tillåter också användning av XSLT direkt med argumentet—xslt={name}.xls på kommandot srcml2src. Genom att använda srcMLs uppmärkning med XSLT kan användaren tillämpa programtransformationer på en XML-liknande struktur (srcML) för att få transformerad xml som sedan kan skrivas tillbaka sin källkodsrepresentation med hjälp av verktyget srcml2src. Tillämpningen av srcML på programtransformation förklaras i detalj av Collard et al.

Följande kommando kommer att köra XSLT-programmet program.xsl på srcML archive project.xml

srcml —xslt program.xsl project.xml

Faktaextraktion med srcML

I sin enklaste form utnyttjar Faktaextraktion med srcML XPath för att adressera delar av srcML-dokumentet och hämta information om olika enheter eller egenskaper hos källkoden. Naturligtvis är det inte begränsat till detta. Alla standard XML API kan användas. Tillämpningen av srcML på faktaextraktion förklaras i detalj av Kagdi et al.

cpp:direktiv, cpp:fil, cpp:inkludera, cpp:define, cpp:undef, cpp:linje, cpp:if, cpp:ifdef, cpp:ifndef, cpp:else, cpp:elif, cpp:endif, cpp: sedan, cpp:pragma, cpp:errorliteral, operator, modifier Ett exempel för att skapa ett srcML-arkiv från ett helt programvaruprojekt.

Följande kommando kör XPath-sökvägen på ett srcML-arkivprojekt.xml

srcml —xpath "xpath" project.xml

Arbete pågår med att tillhandahålla bekväma förlängningsfunktioner.

Analys av källkodsskillnad med srcML

srcML ger många fördelar med att göra skillnadsanalys på källkod. En av dessa fördelar är möjligheten att fråga efter skillnader mellan specifika sektioner av en kodbas såväl som mellan versioner av samma kodbas. Tillämpningen av srcML för skillnadsanalys förklaras i detalj av Maletic et al.

Exempel

Som ett exempel på hur srcML används, här är ett XPath-uttryck som kan användas för att hitta alla klasser i ett källdokument:

//src:klass

Ett annat exempel kan vara att hitta alla kommentarer inom funktioner:

/src:function//src:comment

På grund av att srcML är baserat på xml kan alla XML-verktyg användas med srcML, vilket ger rik funktionalitet.

Se även

  • Maletic, Jonathan I., Collard, Michael L., Kagdi, Huzefa (2004). Utnyttja XML-teknik för att utveckla programanalysverktyg . Proceedings of the 4th International Workshop on Adoption-Cenric Software Engineering (ACSE'04). s. 6 sidor. {{ citera bok }} : CS1 underhåll: flera namn: lista över författare ( länk )
  • Collard, Michael L., Maletic, Jonathan I., Marcus, Andrian (2002). Stöddokument och datavyer av källkod . Proceedings of the 2nd ACM Symposium on Document Engineering (DocEng'02). s. 8 sidor. {{ citera bok }} : CS1 underhåll: flera namn: lista över författare ( länk )
  • Maletic, Jonathan I., Collard, Michael L., Marcus, Andrian (2002). Källkodsfiler som strukturerade dokument . Proceedings of the 10th IEEE International Workshop on Program Comprehension (IWPC'02). s. 4 sidor. {{ citera bok }} : CS1 underhåll: flera namn: lista över författare ( länk )

externa länkar