Buscar..


Ayuda de idioma

ANTLR es capaz de generar analizadores para varios lenguajes de programación:

  1. C # Target
  2. Objetivo de Python
  3. Objetivo de JavaScript
  4. Java Target

De forma predeterminada, ANTLR generará un analizador desde la línea de comandos en el lenguaje de programación Java:

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

Para cambiar el idioma de destino, puede ejecutar el siguiente comando desde el terminal del sistema operativo / línea de comandos:

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

En lugar de usar el parámetro '-Dlanguage' en la línea de comandos / terminal cada vez que cree el analizador deseado para un idioma específico, puede seleccionar el destino desde su archivo de gramática .g4 al incluir el destino en la sección global:

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

Para usar la salida del analizador generada, asegúrese de tener el tiempo de ejecución ANTLR para el idioma especificado:

  1. Tiempo de ejecución CSharp
  2. Python 2 runtime
  3. Python 3 runtime

Instrucciones completas e información sobre las bibliotecas de tiempos de ejecución de ANTLR

Configuración del analizador Python

Después de ejecutar su archivo de gramática .g4 con ANTLR.jar, debe tener una cantidad de archivos generados, tales como:

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

Para usarlos en un proyecto de Python, incluya el tiempo de ejecución de Python en su área de trabajo para que cualquier aplicación que esté desarrollando pueda acceder a la biblioteca ANTLR. Esto se puede hacer extrayendo el tiempo de ejecución en su carpeta de proyecto actual o importándolo dentro de su IDE en las dependencias de su proyecto.

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

Esta configuración incluye su analizador y acepta la entrada desde la línea de comandos para permitir el procesamiento de un archivo pasado como parámetro.

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

Estos archivos, junto con el tiempo de ejecución ANTLR y sus archivos generados a partir de su archivo de gramática, aceptarán un solo nombre de archivo como argumento y leerán y analizarán sus reglas gramaticales.

Para ampliar la funcionalidad básica, también debe ampliar la escucha predeterminada para manejar eventos relevantes para tokens que se encuentran durante el tiempo de ejecución.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow