2011-05-04 13 views

Respuesta

4

de utilizar a menudo vacío como alternativa, haciendo efectiva la expresión global opcional BNF:

leading_sign ::= + | - | empty 
integer ::= leading_sign digit... 

Esto es innecesario en pyparsing, ya pyparsing incluye la clase opcional para esto: hace

# no empty required 
leading_sign = Optional(oneOf("+ -")) 
integer = leading_sign + Word(nums) 

vacía ser útil para algunos propósitos específicos-pyparsing sin embargo:

salta sobre los espacios en blanco - algunos elementos en pyparsing no ignora los espacios en blanco antes de comenzar su análisis, como CharsNotIn y restOfLine. Si usted tenía una entrada sencilla de entradas de valores clave, en el que la clave estaba en una cadena entre comillas y el valor era todo después de que la cadena entre comillas, así:

"Key 1" value of Key 1 
"Key 2" value of Key 2 

La definición de este como:

quotedString + restOfLine 

le daría "valor de clave 1" y "valor de clave 2" como valores. Pyparsing de vacío qué pasar por alto los espacios en blanco, por lo que cambiar a la gramática:

quotedString + empty + restOfLine 

le dará los valores sin los espacios iniciales.

Activación de acciones de análisis sintáctico en lugares específicos - Solía ​​de vacíos como parte de la expresión generada en originalTextFor a caer en los marcadores de inicio y final de ubicación. Las acciones de análisis sintáctico para el vacío de los sustituyen con sus valores de localización, entonces la acción de análisis sintáctico para originalTextFor utiliza esos lugares para cortar el texto original de la cadena de entrada.

Tenga cuidado al usar vacía. vacíos siempre partidos, pero nunca avanza la ubicación de análisis (excepto para saltarse los espacios en blanco). Por lo tanto:

OneOrMore(empty) 

habrá un bucle infinito.

empty | "A" | "B" | "C" 

nunca coincidirán con cualquiera de las alternativas que no estén vacíos, ya que MatchFirsts cortocircuito.

Cuestiones relacionadas