Recherche…


Support linguistique

ANTLR est capable de générer des analyseurs pour un certain nombre de langages de programmation:

  1. C # Cible
  2. Cible Python
  3. Cible JavaScript
  4. Cible Java

Par défaut, ANTLR générera un analyseur à partir de la ligne de commande dans le langage de programmation Java:

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

Pour changer la langue cible, vous pouvez exécuter la commande suivante à partir du terminal OS / ligne de commande:

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

Plutôt que d'utiliser le paramètre '-Dlanguage' sur la ligne de commande / terminal chaque fois que vous créez l'analyseur souhaité pour une langue spécifique, vous pouvez sélectionner la cible dans votre fichier de grammaire .g4 en incluant la cible dans la section globale:

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

Pour utiliser la sortie d'analyse analysée, assurez-vous que vous disposez du moteur d'exécution ANTLR pour la langue spécifiée:

  1. CSharp runtime
  2. Python 2 runtime
  3. python 3 runtime

Instructions complètes et informations sur les bibliothèques d'exécution ANTLR

Configuration de l'analyseur Python

Après avoir exécuté votre fichier .g4 avec ANTLR.jar, vous devez avoir généré un certain nombre de fichiers tels que:

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

Pour les utiliser dans un projet python, incluez le runtime Python dans votre espace de travail afin que toute application que vous développez puisse accéder à la bibliothèque ANTLR. Cela peut être fait en extrayant le runtime dans votre dossier de projet actuel ou en l'important dans votre IDE dans les dépendances de votre projet.

#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) 

Cette configuration inclut votre analyseur et accepte l’entrée de la ligne de commande pour permettre le traitement d’un fichier passé en paramètre.

#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')

Ces fichiers, associés à l'environnement d'exécution ANTLR et à vos fichiers générés à partir de votre fichier de grammaire, accepteront un seul nom de fichier comme argument et liront et analyseront vos règles de grammaire.

Pour étendre les fonctionnalités de base, vous devez également développer l'écouteur par défaut pour gérer les événements pertinents pour les jetons rencontrés lors de l'exécution.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow