2011-03-04 3 views
7

को मैं,, एक सी कोड से सार सिंटेक्स पेड़ (एएसटी) प्राप्त करने के लिए एक OCaml मूल्य में इतना है कि मैं आगे एक सादे OCaml कार्यक्रम के साथ पार्स कोड संसाधित कर सकते हैं करना चाहते हैं।पार्सिंग सी OCaml

मैं मन में था जीसीसी उपयोग करते हैं, एक हुक के साथ एएसटी (Gimple में) मिलता है, और OCaml को Gimple कोड कन्वर्ट करने के लिए।

लेकिन मुझे आश्चर्य है कि कोई दूसरा तरीका है, या अगर किसी ने पहले से ही ऐसा कुछ किया है। (मैं बहुत वास्तव में उस पर नहीं मिला है ...)

मैं सीआईएल का उपयोग कर का सहारा लेना नहीं चाहता। यह सी कोड के लिए एक ओकैमल पार्सर है, लेकिन इसमें जीसीसी के सभी अनुकूलन शामिल नहीं हैं। (मुझे विशेष रूप से सीआईएल में लागू किए गए एक से अधिक गहन उपनाम विश्लेषण की आवश्यकता है)।

क्या एलएलवीएम देखने के लिए एक अच्छा विचार हो सकता है? शायद पहले ही हो चुका है?

कोई बेहतर विचार?

+3

पार्सिंग! = अनुकूलन। उत्तरार्द्ध बाद में आता है। – delnan

उत्तर

9

सीआईएल के साथ आपकी समस्या को प्रदान की उर्फ ​​विश्लेषण की शुद्धता है, तो Frama-C पर एक नज़र डालें। यह सीआईएल पर आधारित है लेकिन precise value analysis प्रदान करता है जो पॉइंटर्स के लिए काम करता है। मूल्य विश्लेषण मॉड्यूलर आर्किटेक्चर के अंदर अपने परिणाम उपलब्ध कराता है।

+2

सेकेंडेड: सीआईएल और फ्रामा-सी शायद सबसे अच्छे उपकरण हैं जिनके लिए आप उम्मीद कर सकते हैं, और पास्कल क्यूक पूछने वाले सही लोगों में से एक है। – gasche

+0

लेकिन गिंपल कोड, या यहां तक ​​कि एलएलवीएम कोड के लिए एक पार्सर लिखने के बारे में कैसे? मैं फिर उन संकलकों के लिए सभी अनुकूलन कोड * के बाद देखता हूं, और एएसटी को ओसीएमएल मान में पार्स करता हूं ... क्या ऐसा है ... अचूक? – Daz

+0

@Daz यदि आप उस मार्ग पर जाते हैं, तो मैं एलएलवीएम की सिफारिश करता हूं। कम से कम कुछ साल पहले, जब हमने अपना खुद का विकल्प बनाया, तो जीसीसी डेवलपर्स ने गिंपल की स्थिरता के बारे में कोई गारंटी नहीं दी, और वास्तव में यह संस्करण से संस्करण में बदल रहा था। मुझे यकीन नहीं है कि आप इंटरमीडिएट भाषा अनुकूलन से किस प्रकार के जादू की अपेक्षा करते हैं, लेकिन फ्रामा-सी में अनुप्रयोगों के लिए, कोड की ट्रेसिबिलिटी और सामान्यीकरण ऑप्टिमाइज़ेशन से अधिक महत्वपूर्ण है (और यहां तक ​​कि इन दोनों को एक ही समय में बिना कठिन होना चाहिए तीसरा)। –

0

एक अन्य OCaml के लिए सी पार्स करने के लिए विकल्प FrontC होगा। इसका विवरण कहता है:

फ्रंटसी एक ओसीएएमएल लाइब्रेरी है जो सी पार्सर और लेक्सर प्रदान करती है। परिणाम सामान्य ओसीएएमएल पेड़ प्रबंधन के साथ प्रक्रिया करने के लिए एक वाक्य रचनात्मक पेड़ आसान है।

यह एएनएसआई सी सिंटैक्स, पुराने-सी के & आर शैली वाक्यविन्यास और मानक जीएनयू सीसी विशेषताओं के लिए समर्थन प्रदान करता है।

यह उपयोग के उदाहरण के रूप में एक सी सुंदर प्रिंटर भी प्रदान करता है।