Tengo un software que analiza las rutas de Verilog y se encarga de asignar dichas rutas a una secuencia de objetos. El problema es encontrar una expresión regular para dividir las rutas de Verilog en secuencias de nombres de instancia.
Las rutas de Verilog son secuencias de identificadores de Verilog concatenados con puntos. Cada identificador es un nombre de instancia. Los "." La relación en ABC significa que, en la jerarquía del módulo, A es el padre y B es uno de los hijos de A. C es uno de los hijos de B.
Cada ruta de Verilog identifica una instancia única en la jerarquía del módulo.
Pseudocódigo:
Verilog Identifier A
Verilog Identifier B
Verilog Identifier C
Ruta a la instancia C del padre B que es hijo de A:
A.B.C
Ahora, el problema es que los identificadores de Verilog pueden ser cualquier secuencia de " letras, dígitos, guiones bajos (_) y signos de dólar ($). El primer carácter de un identificador solo puede ser una letra o un guión bajo ", como se indica en esta página: http://verilog.renerta.com/source/vrg00018.htm
Con esta situación, Python podría dividir la ruta simplemente escribiendo:
>>> path = "a.verilog.path"
>>> print path.split(".")
['a', 'verilog', 'path']
Desafortunadamente, los identificadores pueden ser identificadores de escape .
Los identificadores de escape comienzan con una barra invertida y terminan con un espacio. Dentro de la barra invertida y el espacio, puede tener cualquier carácter (excepto el espacio), ¡incluso puntos!
\an_escaped_identifier_that_ends_with_space
\another-identifier,withsome.dots)insideit_ending_withspace
Entonces las cosas se complican más y ya no puede confiar en el split. He aquí un ejemplo:
Verilog Identifier identifier1
Verilog Identifier \escaped.identifier_2
Verilog Identifier identifier3
Ruta a la instancia identifier3 de parent \ escaped.identifier_2 que es secundario de identifier1:
identifier1.\escaped.identifier_2 .identifier3
Entonces, ¿cómo podemos usar el re
módulo de Python para abordar todas las posibles rutas de Verilog compuestas por un número arbitrario de identificadores y / o identificadores de escape?
([a-z_][a-z0-9$_]*|\\\S* )
debe coincidir con identificadores regulares y de escape.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras