Patrón de expresiones regulares para dividir la ruta de Verilog en diferentes instancias usando Python

auserdude

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 remódulo de Python para abordar todas las posibles rutas de Verilog compuestas por un número arbitrario de identificadores y / o identificadores de escape?

Miembro de Håken

([a-z_][a-z0-9$_]*|\\\S* ) debe coincidir con identificadores regulares y de escape.

https://regex101.com/r/IxLakb/2

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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo