yurikhan: (Default)
[personal profile] yurikhan

Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. /Jamie Zawinski

Студия Артемия Лебедева опубликовала валидатор XML, построенный на регекспах.

В то время как каждый студент, прослушавший курс «Теория программирования», «Теория вычислений» или аналогичный, должен знать, что грамматики делятся на регулярные, контекстно-свободные, контекстно-зависимые и общего вида. Причём между языками, порождаемыми этими классами, существует иерархия вложения — LRLCFLCDL, причём все отношения включения — строгие (то есть для каждых двух соседних классов существует пример языка, описываемого более мощным и не описываемого менее мощным).

Так вот, регулярные выражения способны разобрать лишь регулярные языки. А грамматика XML — контекстно-свободная.

Я не вчитывался внимательно в весь код, но, как минимум, <!DOCTYPE> может согласно их валидатору находиться в любом месте и в любых количествах. Кроме того, они упорно используют во всех регекспах конструкцию [a-z_][\w:-]*, в то время как по спецификации имя должно начинаться с Буквы (включая латинский, греческий, кириллический, армянский, еврейский, арабский, бенгальский, тамильский, тайский, лаосский, тибетский, грузинский алфавит, деванагари, гурмукхи, гуджарати, ория, телугу, каннада, малаялам, хангыль, хирагану, катакану и чжуинь, а также китайские/японские иероглифы) и может содержать точки, двоеточия, подчёркивания, дефисы, Буквы, Цифры (европейские, арабо-индийские, деванагари, бенгальские, гурмукхи, гуджарати, ория, тамильские, телугу, каннада, малаялам, тайские, лаосские и тибетские), Комбинирующуюся диакритику и Экстендеры. (Для любопытных: нет, в ECMAScript эскейп \w не матчит все эти экзотические алфавиты — он эквивалентен тупо [A-Za-z0-9_].)

Мораль отсюда такова: определить, является ли текст корректным и/или валидным XML можно лишь пропустив его через настоящий парсер.

(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-07-06 22:46
Powered by Dreamwidth Studios