15 мая 2012 · Комментарий

Без заголовка

Вот не пойму, при чем тут макросы и ленивость? Как ленивостью можно сделать такое в коде: [nemerle] def html = xml <# $title
  • $author
#> [/nemerle] Я хочу сконструировать иксэмэль в коде, я и конструирую иксэмель в коде. При этом иксэмель конструируется не в виде строки, а в виде типизированного дерева. Вот здесь тоже иксэмель конструируется, но я не вижу иксэмеля: [C#] new XElement("Bar", new XAttribute("SomeAttr", "SomeAttrValue"), new XElement("Name", s.Name), new XElement("Value", s.Value) ) ); [/C#] А вверхнем примере я вижу иксэмель. Потому что иксэмель состоит из тегов с угловыми скобочками - там есть теги с угловыми скобочками. Или как мне написать парсер какого-нибудь кс языка? В свое время я попробовал несколько способов - yacc/bison+lex, boost::spirit. Первое - специализированные утилиты - гиморрой интеграции с языком. Второе - шаблонное безумие на С++. Все клево в теории, но ацкий синтаксис, куча неявных зависимостей, сообщения об ошибках - треш, компилятор начинает кушать гигабайты памяти на более-менее сложных грамматиках. Ничего более удобного в написании и поддержке, чем Nemerle.PEG я не использовал для этих целей. На нем уже написаны(из того что есть в свободном доступе ) - парсер С#, xml, json. Какой-то чел написал на нем парсер формул TeX. А вы все про ленивость. Вот весь ленивый из себя Хаскел - как мне на нем сделать чтобы я прям в коде мог строить иксэмэль как и положено строить иксэмль - из тегов с угловыми скобочками. А внутри тегов - аттрибуты в виде key="val".

К записи · К обсуждению