¿Hay algún buen tutorial que describa cómo usar ANTLR para analizar cadenas de búsqueda booleanas?

StackOverflow https://stackoverflow.com/questions/1209005

  •  05-07-2019
  •  | 
  •  

Pregunta

Necesito analizar una cadena de búsqueda booleana de palabras clave y operadores en una consulta SQL para ejecutarla desde el código C #. Creo que algo como ANTLR es lo que necesito para esta tarea, pero no estoy seguro de cómo hacerlo.

¿Hay buenos tutoriales sobre cómo hacer esto? ¿O tal vez necesito una herramienta diferente?

A continuación se muestra un ejemplo de lo que quiero decir. Los únicos operadores que necesito son AND y OR. También me gustaría poder usar paréntesis.

  

expresión de entrada: (azul Y verde) O amarillo

     

salida:

     

SELECCIONAR *   DE mesa   DONDE (CONTIENE (Descripción, & Quot; azul & Quot;) Y CONTIENE (Descripción, & Quot; verde & Quot;)) O & Gt; CONTIENE (Descripción, & Quot ; amarillo "

Si es posible, también me gustaría admitir la inserción Y implícita. Entonces, el operador predeterminado si no se especifica ninguno es AND.

  

entrada: verde (azul o amarillo)

     

salida:   SELECCIONAR *   DE mesa   DONDE CONTIENE (Descripción, & "; Verde &"; Y Y (CONTIENE (Descripción, & "; Azul &";) O & Gt; CONTIENE (Descripción, & "; amarillo "))

¿Fue útil?

Solución

Probablemente haría esto con el procesamiento de texto directo. Esencialmente, lo que desea hacer es tomar la expresión original, extraer todos los colores y reemplazarlos con la cláusula CONTAINS. En pseudocódigo:

list of tokens = split input expression into tokens separated by spaces
foreach token in tokens
    if token is not keyword
        text = "CONTAINS(Description, \"" + token + "\")"
    else 
        text = token

    output = output + text
end

Donde las palabras clave son " (" ;, " AND " ;, etc. Luego, simplemente coloca el resultado en tu instrucción SQL

< inserte advertencia sobre los ataques de inyección SQL aquí >

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top