¿Cómo puedo analizar una lista de pares nombre = valor en un generador de analizadores sintácticos (antlr, YACC etc)?

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

Pregunta

Quiero analizar una lista de (espacio en blanco separado) pares en forma de

name1=value1 name2=value2 ...

donde:

  • nombre puede contener nada más que un espacio en blanco signo e iguales
  • valor puede contener nada más que un espacio en blanco (incluyendo signos igual!)

El problema es conseguir el analizador para que coincida con la entrada como

name1=value1

como tokens 'NAME EQUALS VALUE' separadas, no como un único token 'VALUE'.

PS. Sé que esto es trivial para codificar directamente, pero necesito esto en el contexto de un programa de análisis más amplio.

¿Fue útil?

Solución

Aquí hay algo en antlr, que analiza este;

a=b=c=d c=d e=f

Esto puede no ser todo lo que necesita, pero debe ser el núcleo.

grammar NameValuePairs;

pairs   :  namevaluepair (WS namevaluepair)*;

namevaluepair
  :  name '=' value;

name  :  ID;

value  :  ID ('=' ID)*;

WS  :  ' ' {skip()};

EQ  :  '=';

ID  :  ~(' ' | '=')*;

Otros consejos

Creo que puede terminar con un problema si el valor puede contener el signo igual. Creo que sería mejor, si es posible, para que el signo igual un carácter reservado, o cambiar a un carácter reservado diferente en el sentido de '='.

No estoy seguro de si esto iba a funcionar en el contexto de su programa de análisis más amplio, pero se puede dividir en el espacio, que le da una matriz (o lo que sea la estructura de datos de la lengua usaría) de 'nombre = valor' pares. A continuación, recorrer la matriz y se dividió de nuevo en el carácter reservado que está utilizando para '='. Si no se puede cambiar o reserva '=', usted podría simplemente expresión regular para coincidir con la primera instancia de '='. Espero no estar fuera de lugar!

Usted no necesita un fuerte programa de análisis de pares de nombre y valor, la expresión regular sería suficiente. A menos que tenga algún tipo de estructura contextual o anidado, este 'trabajo' pertenece en el léxico, no el programa de análisis:)

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