Я делаю приложение, в котором мне нужно проверить синтаксис каждой строки, которая содержит команду, включающую ключевое слово в качестве первого слова.
Кроме того, если синтаксис правильный, мне нужно проверить тип переменных, используемых в ключевых словах.
Например, если есть команда печати:
print "string" < variable < "some another string" //some comments
print\s".*"((\s?<\s?".*")*\s?<\s?(?'string1'\w+))?(\s*//.*)?
Итак, я сделал следующее регулярное выражение:
\s*[<>]\s*((?'variant'\w+)(\[\d+\])*)
Это доступ ко всем словам в группе вариантов для извлечения используемых переменных и проверки их типа.
Таким образом, мой инструмент имеет много ключевых слов, и в настоящее время я грубо пишу регулярные выражения для каждого ключевого слова. И если завтра произойдут изменения, я буду заменять соответствующие изменения везде и во всех ключевых словах.
Я храню регулярное выражение для каждого ключевого слова в файле XML. Однако я был заинтересован в том, чтобы сделать его расширяемым, где, скажем, спецификация изменится завтра, поэтому мне нужно изменить ее только один раз, и она будет отражать во всех местах что-то вроде преобразования преобразования регулярного выражения в:
print %string% (%<% %string%|%variable%)* %comments%
Теперь вот так я пишу спецификацию для каждого ключевого слова и записываю определение строки, переменной, комментариев в другой файл, в котором хранится их регулярное выражение. Затем я пишу парсер, который анализирует эту строку и создает для меня строку регулярного выражения.
Возможно ли это?
Есть ли лучший способ сделать это или я могу сделать это в XML?