Могут ли функцию Parse Rebol сможет создавать правила для анализа CSS2 / CSS3 полностью?
-
28-09-2019 - |
Вопрос
Существуют ли ограничение для разбора функции 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, но это было бы той же идеей.