Küsimus:
C # parser mittetäieliku C-koodi sõelumiseks
George Swazovski
2014-10-25 11:18:54 UTC
view on stackexchange narkive permalink

Kas on olemas mõni C # parser, mida saaksin kasutada puuduliku c-lähtekoodi sõelumiseks. Püüan rakendada lähtekoodi evolutsiooni c-koodi analüüsi tööriista, mis põhineb C-koodi erinevate versioonide analüüsimisel. Siiani olen proovinud selleks antlr4-ga tutvuda, kuid tundub, et see ei tööta üldse mittetäieliku koodiga.

Nii et kas keegi võib soovitada mulle parserit, kes seda saaks teha.

ANTLR pakub C grammatikat, nii et see võib tunduda hea lähtepunkt. Kuid ma arvan, et sellel pole koodifragmentide parsimise võimalust. Samuti ei usu ma, et pakutavatel C-grammatikatel on C-eeltöötluse võimalus. mis on mis tahes praktilise lahenduse tõenäoline element.
üks vastus:
Ira Baxter
2015-03-22 14:00:34 UTC
view on stackexchange narkive permalink

Meie DMS tarkvara ümbersuunamise tööriistakomplekt koos oma C esiosaga võib sõeluda "mittetäieliku koodi".

Eelkõige on antud DMS-põhine parser , DMS pakub mõlemaid

  • mitteterminalseid parseldajaid (see tähendab, et DMS sõelub kõik stringid, mis on nonterminalid, näiteks avaldis, lause, deklaratsioon. Sellised sõelumised, kui õnnestub, toovad AST-i tähistatud nonterminalile.
  • meelevaldsed alamstringide parserid, mis just seda sõeluvad. Tulemuseks on alamstringi hõlmavate AST-de jada. Kui alamstring osutub mitteterminaliks, saate ainult ühe puu.

Kui fragment kasutab makrosid või eeltöötluse tingimisi, tekivad tüsistused. Parsimise konteksti saate vajalike makrodefinitsioonidega eelkonfigureerida.

Muidugi sõelub DMS täielikud kompileerimisüksused, sellel on täielik eeltöötleja (mille jaoks saate sõelumisel kontrollida, kui palju sellest "paisub" vs jääb), samuti sümbolitabeli ülesehitust ning juhtimist ja andmevoo analüüsi. see kehtib ainult tervete programmide kohta, kuid seda saab teatud vaevaga kohandada programmifragmentide jaoks.

Kokkuvõte:

  • C # -põhine parser: EI
  • Sõelub C (ja muu keele) fragmendid: JAH


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...