Если вы создаете свой собственный язык, вы должны действительно узнать о стандартных методах обработки исходного кода языка. (Вы можете предлагать умные новые идеи, но большинство таких идей оказывается не такими умными, и если вы знаете стандартные, то зачастую довольно очевидно, почему).
Вы действительно не можете обработать свой код и "сопоставить" скобки с чистым регулярным выражением. Вам нужен какой-то автомат или механизм подсчета для сопоставления вложенных парантезов (или чего-либо еще, что может совпадать, например, фигурные скобки, IF и ENDIF, ...), часто называемые «синтаксический анализатор» в контексте таких задач.
Относительно ваших 3 вопросов:
1) Regex или ручной код?
Вместо этого узнайте / используйте генераторы синтаксического анализатора, например ANTLR .
2) Это хорошо или плохо? Игнорирование кода, если он никогда не используется, поможет улучшить скорость парсера?
Это действительно «преждевременная» оптимизация. Лучше просто получить быстрый двигатель разбора. ANTLR довольно хорош; Сомневаюсь, заметишь ли ты разницу. Если вы настаиваете на быстрой скорости, рассмотрите LRSTAR ; Парень, который создал это, провел последнее десятилетие микрооптимизации своих сгенерированных парсеров, и они очень быстрые
И учитывая, что вы пытаетесь реализовать язык программирования, я бы посоветовал вам беспокоиться о гораздо более серьезных проблемах его точного определения, создания работающего синтаксического анализатора и борьбы с его практическим выполнением (означает ли это интерпретация или компиляция не имеет значения). Учитывая ваш уровень понимания парсингового бизнеса, я подозреваю, что вы действительно не готовы сделать это. Вам лучше потратить некоторое время на изучение работы компиляторов в целом, поэтому у вас есть ориентир.
3) Не по теме: несколько советов по ускорению работы парсера? Может быть, «предварительно проанализированный» файл, в котором хранится код языка с компьютерным кодом (код операции ???)?
Вы можете ускорить анализатор, предварительно обработав текст и сохранив его в виде набора токенов. Вы также можете ускорить его, сохранив результат предыдущего анализа в предположении, что он не изменился (большинство исходных файлов в больших системах кода не изменяются, даже если их много перекомпилируют). Вы даже можете хранить скомпилированный код в некотором представлении вместе с исходным текстом, чтобы избежать его компиляции. [Я рассмотрел хранение скомпилированного кода для отдельных функций, подобных этой; даже когда файл редактируется, большинство функций не изменяются]. У всех этих трюков есть проблемы: как заставить программиста и редакторов сотрудничать, настроив все это? Намного проще просто создать быстрый парсер, и вам стоит начать с него и позже позаботиться о причудливых уловках.