खोज…


भाषा समर्थन

ANTLR कई प्रोग्रामिंग भाषाओं के लिए पार्सर्स बनाने में सक्षम है:

  1. C # लक्ष्य
  2. अजगर का निशाना
  3. जावास्क्रिप्ट लक्ष्य
  4. जावा लक्ष्य

डिफ़ॉल्ट रूप से ANTLR जावा प्रोग्रामिंग भाषा में कमांडलाइन से एक पार्सर उत्पन्न करेगा:

Java -jar antlr-4.5.3-complete.jar yourGrammar.g4 //Will output a
    java parser

लक्ष्य भाषा बदलने के लिए आप OS टर्मिनल / कमांडलाइन से निम्न कमांड चला सकते हैं:

    antlr4 -Dlanguage=Python3 yourGrammar.g4 
//with alias
    java -jar antlr-4.5.3-complete.jar -Dlanguage=Python3 yourGrammar.g4 
//without alias

कमांडलाइन / टर्मिनल पर प्रत्येक बार अपने इच्छित पार्सर को विशिष्ट भाषा के लिए बनाने के लिए '-डालंगेज' पैरामीटर का उपयोग करने के बजाय आप अपने .g4 व्याकरण फ़ाइल के भीतर के लक्ष्य को वैश्विक खंड के भीतर शामिल करके चुन सकते हैं:

options {
    language  = "CSharp";
}
//or
options {
    language="Python";
}

उत्पन्न पार्सर आउटपुट का उपयोग करने के लिए सुनिश्चित करें कि आपके पास निर्दिष्ट भाषा के लिए ANTLR रनटाइम है:

  1. CSharp रनटाइम
  2. पायथन 2 रनटाइम
  3. अजगर 3 रनटाइम

ANTLR रन-टाइम लाइब्रेरी पर पूर्ण निर्देश और जानकारी

पायथन पार्सर सेटअप

अपना व्याकरण .g4 फ़ाइल ANTLR.jar के साथ चलाने के बाद आपके पास कई फाइलें होनी चाहिए जैसे कि:

1.yourGrammarNameListener.py
2.yourGrammarNameParser.py
3.yourGrammarName.tokens
...

अजगर परियोजना में इनका उपयोग करने के लिए अपने कार्यक्षेत्र में अजगर रनटाइम को शामिल करें ताकि आप जो भी एप्लिकेशन विकसित कर रहे हैं वह ANTLR लाइब्रेरी तक पहुंच सके। यह रनटाइम को आपके वर्तमान प्रोजेक्ट फ़ोल्डर में निकालने या IDE के भीतर अपने प्रोजेक्ट निर्भरता में आयात करके किया जा सकता है।

#main.py
import yourGrammarNameParser
import sys

#main method and entry point of application

def main(argv):
    """Main method calling a single debugger for an input script"""
    parser = yourGrammarNameParser
    parser.parse(argv)

if __name__ == '__main__':
    main(sys.argv) 

इस सेटअप में आपका पार्सर शामिल है और कमांडलाइन से इनपुट को एक पैरामीटर के रूप में पारित फाइल की प्रोसेसिंग की अनुमति देता है।

#yourGrammarNameParser.py
from yourGrammarNameLexer import yourGrammarNameLexer
from yourGrammarNameListener import yourGrammarNameListener
from yourGrammarNameParser import yourGrammarNameParser
from antlr4 import *
import sys

class yourGrammarNameParser(object):
    """
    Debugger class - accepts a single input script and processes
    all subsequent requirements
    """
def __init__(self): # this method creates the class object.
    pass
        
        
#function used to parse an input file
def parse(argv):
    if len(sys.argv) > 1:
        input = FileStream(argv[1]) #read the first argument as a filestream
        lexer = yourGrammarNameLexer(input) #call your lexer
        stream = CommonTokenStream(lexer)
        parser = yourGrammarNameParser(stream)
        tree = parser.program() #start from the parser rule, however should be changed to your entry rule for your specific grammar.
        printer = yourGrammarNameListener(tree,input)
        walker = ParseTreeWalker()
        walker.walk(printer, tree)
    else:
        print('Error : Expected a valid file')

ये फाइलें ANTLR रनटाइम के साथ युग्मित हैं और आपकी व्याकरण फ़ाइल से उत्पन्न आपकी फ़ाइलें एक एकल फ़ाइलनाम को एक तर्क के रूप में स्वीकार करेंगी और आपके व्याकरण के नियमों को पढ़ेगी और पार्स करेंगी।

बुनियादी कार्यक्षमता का विस्तार करने के लिए, आपको डिफ़ॉल्ट श्रोता पर भी विस्तार करना चाहिए ताकि रनटाइम के दौरान आने वाले टोकन के लिए प्रासंगिक घटनाओं को संभाल सकें।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow