Могут ли функцию Parse Rebol сможет создавать правила для анализа CSS2 / CSS3 полностью?

StackOverflow https://stackoverflow.com/questions/3484854

Вопрос

Существуют ли ограничение для разбора функции Parse? Было бы способно разбирать целые CSS2 / CSS 3 спецификации или станут ли она свидетельствовать о теоретической невозможности формировать некоторые правила?

Обновление после Hostilefork Ответ: Я имею в виду в Regexp, я думаю, что это будет довольно невозможно, это аналог гораздо более мощный?

Если да, это означает, что можно будет построить браузер в Rebol VID совместимым с HTML5?

Это было полезно?

Решение

Ваш вопрос «Есть ли ограничения» скользкий. Я постараюсь дать тебе "то Ответ «вместо того, чтобы просто« Да, конечно »... Что было бы более целесообразным, хотя и не слишком образовательным. :)

Рассмотрим следующий фрагмент. Это захватывает положение парсера в x, а затем бежит в скобках в главных скобках в диалекте. Этот код повторно устанавливается x к хвосту ввода, если css-parser Функция преуспевает, или к головке ввода, если функция не удалась. Наконец, он устанавливает положение анализа на текущий x. Отказ И как мы знаем, анализ возвращается только в том случае, если мы находимся в конце серии ввода, когда правила завершают ...

parse my-css [x: (x: either css-parser x [tail x] [head x]]) :x]

Это допустимый код диалекта разбора И Это возвращает true, если (и только если) css-parser Функция преуспевает. Поэтому, если вы сможете написать анализатор CSS в Rebol, вы можете написать его «в диалекте анализа».

(Это приводит к вопросу можно решить заданную вычислительную проблему в функции REBOL. К счастью, компьютерные ученые не должны ответить на этот вопрос каждый раз, когда появляется новый язык. Вы можете вычислить все, что будет вычислено Тьюринг машина, и ничего, что не может быть ... и проверить Собственные слова Алан Туринга, в Условиях Лэймана. CSS Parsing не именно проблема остановки, так что да ... это можно сделать.)

Я сделаю удар в переработке вашего вопроса:

«Можно ли написать блок правил (которые не используют Paren!, Set-Word!, Или Get-Word! Constens), которые могут быть переданы в функцию анализа и возвращать True на любых действительных файлах CSS и False на любом необработанный? "

Формальная спецификация того, что делает для хороших или плохих CSS, выпущена W3C:

http://www.w3.org/tr/css2/grammar.html.

Но обратите внимание, что даже там это не все нарезанные и сухие. Их «формальные» спецификации цветовых констант не могут исключить #abcd, Они должны были написать об этом в комментариях, на английском языке:

/*
 * There is a constraint on the color that it must
 * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])
 * after the "#"; e.g., "#000" is OK, but "#abcd" is not.
 */
hexcolor
  : HASH S*
  ;

Это приводит нас к спрашиванию, если бы мы простите Rebol за то, что не смог сделать это признание после того, как мы связали руки разбора, забрав Paren! / Get-Word! / Set-Word! (Я просто хочу указать на этот вид вопроса в свете вашего вопроса).

В рамках проекта Parse Rebol 3 проводится запись Теория анализа...

Диалэкционный разборник является расширенным членом семейства языков разбросов сверху вниз (семейство TDPL), включая язык разборы (TDPL), обобщенный язык разборы (GTDPL) и грамматика экспрессии вниз (PEG) и Использует тот же «упорядоченный выбор» методом анализа, как другие члены семьи.

Как указано в ссылке выше, являясь членом этого класса, делает анализ ребка строго сильным, чем регулярные выражения, так и Бурсеры LL. Отказ Я предполагаю, что это более мощно, чем LL (K) и LL * Parsers также, но это было некоторое время, так как я изучал этот материал, и я не ставлю на нее свою жизнь. :)

Вам не нужно понимать, что все это значит для того, чтобы использовать его, чтобы ответить на ваше «можно сделать» вопрос. Так как люди утверждали, что разбираются в анализе CSS с Antlr., А antlr - это анализатор LL *, тогда я бы сказал, что Ребо может это сделать. Парен! Является ли тузовая дыра, которая позволяет вам делать «что-нибудь», если вы попадаете на стену, но это скользкий склон, чтобы начать использовать его слишком небрежно.

Другие советы

Должно быть идеально способным разбирать спецификацию, если у вас есть мотив и терпение, чтобы написать правила. Это было бы немного более вовлечено, чем, скажем, анализатор JSON, но это было бы той же идеей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top