LINUX.ORG.RU

А как bison + lex реагируют на utf-8?


0

1

Прошу заранее извинений, плохо читал про них, даже незнаю как их юзать и чем они отличаются. Просто реализовал HTML-парсер руками на C++ и надо ещё javascript парсить. Но не для того, чтобы его интерпретировать, а чтобы перешагнуть внутри HTML-документа.

Думаю - не попробовать ли переписать и HTML-парсер и javascript-парсер на bison + lex, чтобы «как у людей». Плюс ручной парсер не поддерживает utf-8 и потенциально запнётся и упадёт на каких-нибудь прикольных последовательностях - думаю как дело у bison + lex с этим?

HTML-документ у меня превращается в однонаправленный список структур, каждая из которых описывает HTML-тег (имя тега + список атрибутов, например «/A» + href=http://google.com, class=sobaka). Этот список структур я дальше употребляю в своих коварных целях.

★☆

Последнее исправление: kiverattes (всего исправлений: 2)

На сколько я понимаю, utf-8 символы легко представляются в виде регулярок в восьмибитных кодировках вида <первый_байт><остальные>.

Саму спецификацию не помню, так что помоч написать правило не смогу.

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

Да не, я регулярки юзать не хочу, поддержку utf-8 не сильно тяжело рукамии сделать на текущей базе кода.

kiverattes ★☆
() автор топика

> Просто реализовал HTML-парсер руками на C++ и надо ещё javascript парсить. Но не для того, чтобы его интерпретировать, а чтобы перешагнуть внутри HTML-документа.

Ладно, пропустим полную бредовость идеи писать руками HTML парсер...

ТС, javascript тебе не надо парсить. Тупо работаешь с ним как с обычным тестом в теге <script></script>, и всё.

geekless ★★
()
Ответ на: комментарий от kiverattes

>Да не, я регулярки юзать не хочу, поддержку utf-8 не сильно тяжело рукамии сделать на текущей базе кода.

Как ты собрался использовать lex без регулярок?

SV0L0CH
()

> надо ещё javascript парсить. Но не для того, чтобы его интерпретировать, а чтобы перешагнуть внутри HTML-документа.

тогда следует тег <script> пропускать, а обрабатывать <noscript>.

static_lab ★★★★★
()
Ответ на: комментарий от SV0L0CH

Я вообще не собирался использовать lex, я только задавал о нём вопрос.

kiverattes ★☆
() автор топика
Ответ на: комментарий от geekless

Мне проще руками написать HTML-парсер, чем провести исследовательскую работу по поиску уже существующих парсеров, да ещё таких, которые на выходе дают именно те структуры данных, какие нужны мне - именно односвязанный список структур-тегов. Работа по поиску такого парсера + адаптации под мои нужды не сильно будет отличаться от разработки своей парсилки. Да в конце-концов работа уже сделана и думать в сослагательном наклонении тут уже ни к чему.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

> Работать с ним как с обычным текстом между тегами <script></script> не очень получается.

Почему это? В HTML текст, находящийся внутри <script></script>, является символьными данными, не имеющими внутренней разметки. Просто пропускай вси символы, пока не встретишь закрывающий </script>.

geekless ★★
()
Ответ на: комментарий от geekless

Ну потому, что тег </script> может встретиться внутри JavaScript-кода, например являясь частью какой-нибудь там строки или комментария, мать их за ногу.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Зачем сообщение-то удалил?

Может:

var str1 = «Hello world </script>, hahaha!»;

За то время, пока ты набирал это сообщение, ты мог проверить этот код в браузере и убедиться, что не может.

Error: unterminated string literal
Source File: file:///media/work/home/vadim/tmp/1.html
Line: 4, Column: 12
Source Code:
 var str1 = "Hello world 

А теперь иди учи матчасть.

geekless ★★
()
Ответ на: комментарий от geekless

Зачем учить матчасть, если ты всё объяснил, ты зря объяснял что-ли? Не считаешь своё объяснение достаточным? Тогда зачем объяснял? Чё, правда что-ли не может? Фигасе. Ну тогда ладно, буду думать.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Ну хорошо, значит отдельный JavaScript-парсер не нужен, надо только поставить реакцию на встречу тега <script>.

kiverattes ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.