¿Hay algún buen tutorial que describa cómo usar ANTLR para analizar cadenas de búsqueda booleanas?
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 "))
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í >