PEG.js Разрешить любой текст между двумя тегами

1

У меня возникли проблемы с определением выражения, которое позволяет использовать любой текст между двумя тегами (включая теги).

Примеры:

#ifdef
 asdasdasdasdasdsasd
asdasdasdasdasdasdasd
asdasdasdasdasdasasd
#endif

Это также должно позволить

#ifdef
asdasdasd
asdasdsad
#ifdefasdasdasd
asdasdasd
#endif#endif
asdasdasd
asdasdasd
#endif

Итак, как вы можете видеть, до тех пор, пока он начинается и заканчивается #ifdef и endif, любой текст внутри должен быть в порядке.

Может ли кто-нибудь помочь мне создать такое выражение?

Я пробовал до сих пор следующее:

H_IF_IGNORE 
= ("#ifdef) _
  H_IF_IGNORE / (!"#endif"i SourceCharacter)*
  "#endif"

Но он работает не очень хорошо и в конечном итоге потребляет больше текста после последнего endif.

С наилучшими пожеланиями

Теги:
parsing
compiler-construction
peg

1 ответ

1
Лучший ответ

Внутренняя часть может быть либо другой #ifdef или SourceCharacter повторяется, так что обе части должны быть в круглых скобках.

Попробуйте что-нибудь в этом направлении:

H_IF_IGNORE
= "#ifdef" _*
  (H_IF_IGNORE / (!"#endif" SourceCharacter))* _*
  "#endif"

SourceCharacter = .

_ = [\s\n]
  • 0
    Спасибо! Я попробую это и сообщу вам результаты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню