Question

J'écris un analyseur syntaxique pour un langage de programmation de script en PHP. La syntaxe de ce langage de script ressemble à ceci:

ZOMFG
&This is a comment
(show "Hello, World\!");

Ceci est une page écrite dans cette langue, qui affiche Hello, World! dans le navigateur. Mais je pourrais aussi avoir un code comme celui-ci:

ZOMFG
&This is a comment !
on multiple !
lines.
(show !
"Hello, !
World\!!
");

Pour le moment, j'utilise explode (" \ n ", $ content) pour décomposer le contenu de la page en un tableau contenant chaque ligne de code dans un index séparé. Donc

array('ZOMFG', '&This is a comment', '(show "Hello, World\!");');

devient:

&This is a comment !
on multiple !
lines.

Quand une ligne se termine par un! (sauf lorsque! est échappé en tant que \!), il convient d'ajouter cette ligne, y compris la ligne suivante au tableau sous la forme d'un seul élément. Donc

&This is a comment on multiple lines.

devient

<*>

Quelqu'un sait-il comment faire cela?

Était-ce utile?

La solution

vous devriez pouvoir utiliser preg_split avec une apparence négative.

(je trouve un exemple)

$lines = preg_split('|(?<!\!)\n|', $code);

Comme indiqué dans les commentaires, sachez que cela provoque à la fois les caractères de nouvelle ligne et le caractère! rester. Vous ne pouvez pas trouver de solution plus simple que str_replace pour le moment, mais imaginez-en un! ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top