В отсутствие каких-либо хороших бесплатных реализаций XPath 2.0 для .NET для Linq для XML я подумал о том, чтобы реализовать свои собственные (также для опыт). Но только, чтобы быть ясно (и не строить то, что существует) Это XPath 2.0 реализаций я нашел:Шаги и участие в реализации синтаксического анализатора (в .Net - и в этом случае XPath 2.0)
- Saxon .Net
- Query Machine - У меня были проблемы с этим - исключения с примерами
- XQSharp - может быть хорошим, но является коммерческим (один разработчик ~ 300 $)
Теперь, я хочу кое-какие мысли о том, как трудно реализации некоторых языков, таких как выражения XPath 2.0. Я нашел эту ссылку, которая имеет EBNF для выражения XPath 2.0: http://www.w3.org/TR/2007/REC-xpath20-20070123/#id-grammar и я собираюсь сделать ее в F # с помощью комбинации fslex/fsyacc.
Мой фон (субъективный): Я играл с этими инструментами раньше, но только для некоторых простых выражений и очень простого языка программирования. Кроме того, я прочитал большую часть книги Дракона и реалистичную реализацию Appel's Modern в ML, но, к сожалению, я не ставил теорию на практике во время чтения. Я изучаю информатику через год, где закончил курсы теории ex ex finite automaton
, CFL
и алгоритмы, но я был разработчиком много лет до университета (несколько лет с профессиональными работами - главным образом, веб-сайтов).
Теперь шаги разборе и то, что я, как правило, охватывают:
- Lex - Разбор - Сокращения: FsLex/FsYacc. Сначала я не буду полностью покрывать ВСЕ Xpath 2.0, но, по крайней мере, все, что XPath 1.0 может сделать + немного больше.
- Sematic анализ - Я не уверен, о том, сколько есть в этом
- оптимизация - Я не склонен покрывать это (по крайней мере, не в первой)
- Фактический пересекающее и т.д.
- ... ?
Теперь, конкретные вопросы в дополнение к вышесказанному:
- Насколько сложно это сделать парсер такого размера? основанный на моем прошлом, мог бы я с этим поделать?
- Есть ли какие-то важные шаги, которые я пропустил в отношении XPath 2.0 в частности?
- Есть ли какая-то технология, которую я пропустил; Нужно ли покрывать больше, чем просто XPath 2.0 и
XDocument
и т. Д., Чтобы иметь возможность сделать парсер?
Чтобы было ясно: Я хочу сделать XPath выражение 2,0 парсер и траверс XDocument
и т.д. с этим разбирается выражение. Я думаю, что это объединенный механизм запросов.
Обновление: Я нашел это: http://www.w3.org/2007/01/applets/xpathApplet.html который содержит код для разбора и прохода.Я думаю, это было бы хорошим началом или ссылкой :-)
Ваши ответы будут оценены.
Я действительно не понимаю ваш вопрос. XPath - это язык запросов. Ему не нужен синтаксический анализатор, ему нужен существующий хорошо сформированный XML-документ со схемой. Схема XML - это то, что определяет структуру XML, поэтому в действительности это будет ваш «yacc» для XML. Тем не менее, .NET все это поддерживает. Я не вижу необходимости изобретать колесо здесь. – leppie
@leppie Я, возможно, не был ясен в использовании терминов. Я хочу проанализировать '// pf: * [@ name = 'some']/@ *', поэтому это синтаксический анализатор XPath 2.0, который я хочу сделать. –
@lasseespeholt: Но почему? Является ли механизм запросов XPath 2 (который, я считаю, скомпилированными запросами) не работает? Или хотите использовать свои маленькие «dsl» qeuries? – leppie