Эта проблема изоморфна (по крайней мере, как вы ее описали) XML.У вас есть синтаксис, который вводит и заканчивает разметку, и это в основном в парах [воздуходувка] ... [elower] и [вес 15] ... [нормальный] со случайным автономным [newline].
Итак, если вы знаете, как создать синтаксический анализатор XML с тегами, вы тоже знаете, как это сделать.
Если нет, вам просто нужна грамматика (в EBNF) иГенератор парсера:
document = fragment* ;
fragment = TEXT ;
fragment = '[blower]' fragment '[elower]' ;
fragment = '[weight' NATURAL ']' fragment '[normal]' ;
fragment = other_start_tag fragment other_end_tag ;
fragment = '[newline]' ;
Для этого требуется довольно простой лексер и довольно простой парсер.(См. FLEX и YACC в качестве примеров).Вы можете построить DOM как набор узлов дерева, когда анализатор работает, прикрепив действия к правилам грамматики (см. Документацию YACC).Многие другие генераторы синтаксических анализаторов также позволят вам строить дерево во время синтаксического анализа.