/ / Comment tokeniser le code source d'un autre langage de programmation? - python, regex, analyse

Comment tokeniser le code source d'un autre langage de programmation? - python, regex, analyse

Je veux analyser du code PHP, j’ai fait regex qui devrait scinder le code PHP en atomes ( https://regex101.com/r/P074q8/1 ) mais quand j’essaie de l’exécuter, python ne parvient pas à scinder ce code source comme sur le site Web regex101.

Pourquoi mon regex travaille sur regex101.com et ne veut pas travailler en script python?

main.py

import re


class PHPParser:
def __init__(self, filename):
# read php file
with open(filename, "r") as f:
self._source = f.read()

syntax = [
r"/*.*?*/",
r"".*?"",
r"".*?"",
r"$[wd_]+", # variable name
r"w+", # function name
r"return",
r"<?php",
r"=>",
r"?>",
r"[",
r"]",
r",",
r";",
r"(",
r")",
r".",
r"n",
r"s",
r"=",
r"W",
]

s = r"(" + r"|".join(syntax) + r")"
print(s)
tokens = re.split(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)

print(tokens)


if __name__ == "__main__":
p = PHPParser("./vendor/yiisoft/yii2/base/Widget.php")

Réponses:

1 pour la réponse № 1

Tu peux essayer ça,

tokens = re.findall(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)

dans lequel j'ai simplement reposé split() fonctionner avec findall(), parce que vous avez essayé d'obtenir une chaîne correspondante regex101.com par same regex, mais in your python script, vous avez essayé de split en faisant correspondre la chaîne.