@aki2
кратко о себе

Как сделать парсинг лексем для html шаблонизатора?

У меня есть класс лексер, который из текста, например:
%div.content
  %h1.headline Заголовок

возвращает мне массив в лексемами:
[
  {
    lexem: 'tag',
    value: { name: 'div', content: '', attributes: [Object] }
  },
  { lexem: 'indent', value: ' ' },
  {
    lexem: 'tag',
    value: { name: 'h1', content: 'Заголовок', attributes: [Object] }
  }
]

Синтаксис как у haml.
Если один тэг вложен в другой, тогда в лексемы добавляется indent

И я столкнулся с проблемой, что не могу в парсере, нормально описать эту вложенность.
Парсер из этих лексем должен возвращать мне AST. Что-то вроде этого:
{
	type: "root",
	nodes: [
		{
			type: "tag",
			value: {
				name: "div",
        attributes: {
					class: "content"
				},
				nodes: [ // вместо content, я пишу nodes (узлы), в которых будут лежать дочерние тэги
					{
					  // и тут дочерние тэги, а в дочерних тэгах, могут быть еще тэги
					}
				]
			}
		}
	]
}


Но я не могу понять как мне сделать так, чтобы если в одном тэге был другой, он бы делал nodes для первого тэга, а второй бы клал в nodes'ы первого. Запутано, но так есть на самом деле.
+ Если во втором тэге, есть другой тэг, тогда вообще каша полная.

Есть ли какой нибудь алгоритм парсинга лексем для такого рода html шаблонизаторов?
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы