2013-02-17 30 views
14

मैं एएनटीएलआर 4 के लिए नया हूं, और ऐसा लगता है कि v4 के लिए कोई ग्रहण-प्लग-इन नहीं है। इसलिए .g4 व्याकरण से स्वचालित रूप से जावा स्रोतों को बनाना अच्छा लगेगा। मेरे पास एक सरल, खाली मेवेन-प्रोजेक्ट है जिसमें src/main/java, src/test/java है। .g4 फ़ाइलों को कहां रखा जाए? मैं स्वचालित रूप से मेवेन के साथ व्याकरण कैसे बना सकता हूं?एएनटीएलआर 4 और मेवेन के साथ स्वचालित रूप से लेक्सर + पार्सर कैसे उत्पन्न करें?

मेरा अपना पोम-परीक्षण विफल:

<repository> 
    <id>mvn-public</id> 
    <name>MVNRepository</name> 
    <url>http://mvnrepository.com</url> 
</repository> 

... 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.antlr</groupId> 
      <artifactId>antlr4-maven-plugin</artifactId> 
      <version>4.0.0</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>antlr</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

ग्रहण कहते हैं:

Failure to find org.antlr:antlr4-maven-plugin:pom:4.0.0 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of 
central has elapsed or updates are forced 

उत्तर

17

मैं 4 व्याकरण के दौरान एक pom.xmlकेवल तैयार किया गया ANTLR से स्वत: कोड पीढ़ी के समर्थन के लिए के साथ निम्न सार बनाया एक ग्रहण निर्माण। इसमें m2e के लिए आवश्यक जीवन चक्र जानकारी शामिल है, यह जानने के लिए कि कोड जनरेशन आवश्यक है, और स्पष्ट रूप से build-helper-maven-plugin का उपयोग करके कोड जनरेशन फ़ोल्डर को जोड़ता है क्योंकि ग्रहण को अन्यथा इसका पता लगाने में कुछ परेशानी होती है।

इस कॉन्फ़िगरेशन में, व्याकरण फ़ाइलें (*.g4) अन्य जावा स्रोत फ़ाइलों के साथ रखी जाती हैं। मेवेन प्लगइन स्वचालित रूप से जेनरेट की गई फ़ाइलों में उचित package ... कथन जोड़ देगा, इसलिए आपको व्याकरण में @header{package ...} लाइन शामिल नहीं करनी चाहिए।

https://gist.github.com/sharwell/4979017

+0

के लिए इस Antlr4 प्लगइन धन्यवाद! जब मैं pom.xml में बिल्ड-हेल्पर-मेवेन-प्लगइन को टिप्पणी करता हूं, तो एएनटीएलआर रखा व्याकरण के लिए लेक्सर और पार्सर बनाता है। लेकिन बिल्ड-हेल्पर-मैवेन-प्लगइन के साथ ग्रहण कहते हैं: "प्लगइन निष्पादन जीवन चक्र विन्यास द्वारा कवर नहीं किया गया है: org.codehaus.mojo: build-helper-maven-plugin: 1.7: ऐड-सोर्स (निष्पादन: डिफ़ॉल्ट, चरण: जेनरेट-स्रोत) "। एक src-folder के रूप में मैन्युअल रूप से लक्ष्य/जेनरेट-स्रोत/antlr4 को जोड़ने के बिना, मैं जेनरेटेड लेज़र/पार्सर का उपयोग नहीं कर सकता। और एक और सवाल: तर्क कैसे डालें? ' org.example' काम नहीं करता है। – Vertex

+0

ईक्लीप्स स्वचालित रूप से निर्माण सहायक प्लगइन के साथ काम करने के लिए उचित एक्सटेंशन डाउनलोड करेगा यदि आप इसे बताते हैं। पैकेज स्रोत हमेशा आपके स्रोत संरचना में .g4 फ़ाइल के स्थान के आधार पर antlr4 लक्ष्य द्वारा स्वचालित रूप से जोड़ा जाता है। जेनरेट कोड के पैकेज को बदलने के लिए, व्याकरण को स्रोत पेड़ में वांछित पैकेज में ले जाएं। –

+0

हाँ आप सही हैं! मैंने त्वरित फिक्स को अनदेखा कर दिया है। – Vertex