Перефразировать ...многоуровневый алгоритм синтаксического анализа
Я хотел бы знать, как лучше разобрать функции/условными. поэтому, если у вас есть что-то вроде: [if {a} is {12 or 34}][if {b} not {55}] show +c+ [/if][/if]
, который является условным внутри условного. Похоже, я не могу делать это только с регулярным выражением.
оригинального вопрос
сейчас у меня есть довольно простой способ разбора некоторых команд через ActionScript.
Я использую регулярное выражение для поиска меток, команды и операндов, используя ...
+key_word+ // any text surrounded by +
[ifempty +val_1+]+val_2+[/ifempty] //simple conditional
[ifisnot={`true,yes`} +ShowTitle+]+val_3+[/ifisnot] // conditional with operands
моего текущего алгоритм соответствует открывающему тегу [**]
с первым закрывающим тегом [/**]
, даже если он не соответствует. Это означает, что я не мог сделать что-то вроде [ifempty +val_2+][ifnotempty +val_2]+val_3+[/ifnotempty]+val_4+[/ifempty]
- по существу, один условный внутри другого.
Я использую встроенный способ синтаксического анализа, который делит строку на массив строк на основе этого регулярного выражения \[[^\/](?:[^\]])*\](?:[^\]])*\[\/(?:[^\]])*\]
кто может предложить более надежный алгоритм с более надежной разборе конвенции/стандартом? особенно для as3.