Вы могли бы рассмотреть возможность использования лексического анализатора, потому что вы могли бы использовать BNF (или EBNF) для декларативного описания вашего языка (грамматики), а затем просто использовать анализатор для анализа программы, написанной на вашем языке, и получить ее в структуре в память, а затем свободно манипулировать ею.
Это не обязательно, и вы, конечно, можете написать свой собственный, но это зависит от того, насколько сложен язык и сколько времени у вас есть, чтобы заново изобрести колесо.
Кроме того, тот факт, что вы можете использовать язык (BNF) для описания вашего языка без изменения самого лексического анализатора, позволяет вам проводить множество экспериментов и изменять грамматику вашего языка, пока вы не получите именно то, что работает для вас.