yurikhan: (Default)

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 можно лишь пропустив его через настоящий парсер.

Profile

yurikhan: (Default)
Yuri Khan

August 2018

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

Links

Syndicate

RSS Atom

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-07-09 08:43
Powered by Dreamwidth Studios