ANTLR
ANTLR लक्ष्य / भाषा नियम
खोज…
भाषा समर्थन
ANTLR कई प्रोग्रामिंग भाषाओं के लिए पार्सर्स बनाने में सक्षम है:
- C # लक्ष्य
- अजगर का निशाना
- जावास्क्रिप्ट लक्ष्य
- जावा लक्ष्य
डिफ़ॉल्ट रूप से 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 रनटाइम है:
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 रनटाइम के साथ युग्मित हैं और आपकी व्याकरण फ़ाइल से उत्पन्न आपकी फ़ाइलें एक एकल फ़ाइलनाम को एक तर्क के रूप में स्वीकार करेंगी और आपके व्याकरण के नियमों को पढ़ेगी और पार्स करेंगी।
बुनियादी कार्यक्षमता का विस्तार करने के लिए, आपको डिफ़ॉल्ट श्रोता पर भी विस्तार करना चाहिए ताकि रनटाइम के दौरान आने वाले टोकन के लिए प्रासंगिक घटनाओं को संभाल सकें।