Комментарии 9
На правах рекламы: я обладаю проектом, который развиваю некоторое время и решил участвовать с ним в imagine cup 2009. Так как мне интересна алгоритмическая часть и не интересует разработка GUI, то предлагаю питерским студентам присоединиться ко мне в команду. Вакантны два места в команде: дизайнер/верстальщик и специалист в технологии silverlight. Я надеюсь сорвать куш в Каире. Всех, кого заинтересовал прошу обращаться приватно.
Эмблема brainiac здесь в самый раз %)
Когда увидел фичи Nemerle, тоже кинулся портировать Parsec. Правда, я использовал дополнительные операторы (<|>, >>>) и макросы (pdo), получилось ближе к оригиналу (куски из парсера SQL):
private p_query: P[Query] = p_select <|> p_update <|> p_delete <|> p_insert
private p_select: P[Query] = pdo
p_reserved(«SELECT»)
fields <- p_select_list
p_reserved(«FROM»)
tables <- p_tables
condition <- p_optional(p_condition)
group_by <- p_optional(p_grouping)
having <- p_optional(p_having)
order_by <- p_optional(p_ordering)
p_return(Query.Select(fields, tables, condition, group_by, having, order_by))
private p_order: P[Order] = \
p_reserved(«ASC») >>> p_return(Order.Asc) \
<|> p_reserved(«DESC») >>> p_return(Order.Desc)
private p_query: P[Query] = p_select <|> p_update <|> p_delete <|> p_insert
private p_select: P[Query] = pdo
p_reserved(«SELECT»)
fields <- p_select_list
p_reserved(«FROM»)
tables <- p_tables
condition <- p_optional(p_condition)
group_by <- p_optional(p_grouping)
having <- p_optional(p_having)
order_by <- p_optional(p_ordering)
p_return(Query.Select(fields, tables, condition, group_by, having, order_by))
private p_order: P[Order] = \
p_reserved(«ASC») >>> p_return(Order.Asc) \
<|> p_reserved(«DESC») >>> p_return(Order.Desc)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Monadic Parser Combinator в Nemerle