Синтаксический анализатор CSS/HSS в Верхушке дерева и Вложенные Правила Таблицы стилей

Подход Дастина Кэмпбелла уже превосходен. Единственное, что осталось - сохранить решение, интегрированное в .NET, - это действительно простой способ создания действительно общих обработчиков слабых событий:

http://puremsil.wordpress.com/2010/05/03 / родовой-слабого EVENT-обработчики /

5
задан toothygoose 24 April 2009 в 12:56
поделиться

2 ответа

Полагаю, вы столкнулись с проблемами левой рекурсии ? Если это так, имейте в виду, что TreeTop производит рекурсивный анализатор спуска , и поэтому вы не можете использовать левую рекурсию в своей грамматике. (Одна из основных причин, по которой я все еще предпочитаю ocamlyacc / ocamllex над TreeTop, несмотря на его очень привлекательный внешний вид.) Это означает, что вам нужно преобразовать леворекурсивные формы в правую. Поскольку вы, несомненно, являетесь владельцем Dragon Book (верно?), Я направлю вас к разделам 4.3.3, 4.3.4 и 4.4.1, в которых рассматривается эта проблема. Как обычно, это непросто для понимания, но парсеры получили свою репутацию не зря. Есть также хорошее руководство по устранению левой рекурсии , которое ребята из ANTLR опубликовали по этому поводу. Это несколько специфично для ANTLR / ANTLRworks, но это немного легче понять, чем то, что можно найти в Книге Дракона. Это одна из тех вещей, которые никогда не имеют большого смысла для тех, кто не делал этого хотя бы несколько раз раньше.

Кроме того, небольшой комментарий, если вы собираетесь использовать TreeTop, Вместо этого я рекомендую сделать следующее:

def ws
  [\t ]*
end

Вам вряд ли когда-нибудь понадобится сопоставлять один пробельный символ, плюс почти каждое правило грамматики будет нуждаться в нем, поэтому имеет смысл назвать его как-нибудь очень коротким. Между прочим, у отдельного этапа лексирования есть преимуществ. Это один из них.

небольшой комментарий, если вы собираетесь использовать TreeTop, я рекомендую сделать это вместо этого:

def ws
  [\t ]*
end

Вам вряд ли когда-либо понадобится сопоставлять один пробельный символ, плюс почти каждое правило грамматики будет нуждаться в этом, поэтому оно делает смысл называть это чем-то очень коротким. Между прочим, у отдельного этапа лексирования есть преимуществ. Это один из них.

небольшой комментарий, если вы собираетесь использовать TreeTop, я рекомендую сделать это вместо этого:

def ws
  [\t ]*
end

Вам вряд ли когда-либо понадобится сопоставлять один пробельный символ, плюс почти каждое правило грамматики будет нуждаться в этом, поэтому оно делает смысл называть это чем-то очень коротким. Между прочим, у отдельного этапа лексирования есть преимуществ. Это один из них.

3
ответ дан 15 December 2019 в 01:10
поделиться

Похоже, кто-то меня опередил:

http://lesscss.org/

Хотя я заметил, что они используют регулярные выражения и eval () для анализа входного файла вместо парсера.

Edit: Теперь они используют TreeTop! Как будто кто-то сделал за меня всю тяжелую работу.

1
ответ дан 15 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: