Подствека синтаксиса
От: DemAS http://demas.me
Дата: 31.08.04 11:43
Оценка:
Добрый день.

Нужно реализовать подсветку синтаксиса. Интересует алгоритм.

Вот что я придумал:

1) Сканируем текст посимовольно до тех пор пока не следующий симовол не входит в множество [a..z, A..Z, 0..9]
2) Получившееся слово ищем в списке ключевых слов
3) Если находим — обрамляем его тэгами

На первый взгляд — все просто, но чуствую есть подводные камни, которых я не учел. Что скажете ?
... << RSDN@Home 1.1.4 @@subversion >>
Re: Подствека синтаксиса
От: alku  
Дата: 31.08.04 11:52
Оценка: 6 (1)
Здравствуйте, DemAS, Вы писали:

DAS> Добрый день.


DAS> На первый взгляд — все просто, но чуствую есть подводные камни, которых я не учел. Что скажете ?


маленьки примерчик: /* new object() */ — но сначало это коментарий!!! а слова в середине тогда теряют свое назначение
Re[2]: Подствека синтаксиса
От: DemAS http://demas.me
Дата: 31.08.04 12:37
Оценка:
Здравствуйте, alku, Вы писали:

A>маленьки примерчик: /* new object() */ — но сначало это коментарий!!! а слова в середине тогда теряют свое назначение


Что посоветуешь ? Конечные автоматы ?
... << RSDN@Home 1.1.4 @@subversion >>
Re[3]: Подствека синтаксиса
От: alku  
Дата: 31.08.04 13:33
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>Здравствуйте, alku, Вы писали:


A>>маленьки примерчик: /* new object() */ — но сначало это коментарий!!! а слова в середине тогда теряют свое назначение


DAS> Что посоветуешь ? Конечные автоматы ?


смотря что хотиш:
— если расчет на то что надо в рантайме менять конфигурацию рассветки, то прийдеться повозиться самому
— если просто под определнный язык надо сделать, то тогда надо смотреть в сторону уже готовых либ...

зайди на форум посвещенный r# — там вроде эта тема подымалась и обсуждаласть...
Re: Подствека синтаксиса
От: jhfrek Россия  
Дата: 31.08.04 13:36
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS> Добрый день.

DAS> Нужно реализовать подсветку синтаксиса. Интересует алгоритм.

а чем тот же SynEdit не удовлетворяет? http://synedit.sourceforge.net
Re[4]: Подствека синтаксиса
От: DemAS http://demas.me
Дата: 31.08.04 13:41
Оценка:
Здравствуйте, alku, Вы писали:

A>смотря что хотиш:

A>- если расчет на то что надо в рантайме менять конфигурацию рассветки, то прийдеться повозиться самому
A>- если просто под определнный язык надо сделать, то тогда надо смотреть в сторону уже готовых либ...


Хочу конвертер — на вход txt, на выходе расцвеченный html.
А что есть из готовых либ.... ?

Язык довольно специфичен и либу именно под этот язык найти не удастся, поэтому надо искать нечто очень конфигурабельное.
Например, если есть строка — 'stri\'ng' — то это должно подсветиться одной строкой, так как вторая ' — экранируется слешем.
... << RSDN@Home 1.1.4 @@subversion >>
Re[5]: Подствека синтаксиса
От: korzhik Россия  
Дата: 31.08.04 13:47
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS> Хочу конвертер — на вход txt, на выходе расцвеченный html.

DAS> А что есть из готовых либ.... ?

DAS> Язык довольно специфичен и либу именно под этот язык найти не удастся, поэтому надо искать нечто очень конфигурабельное.

DAS> Например, если есть строка — 'stri\'ng' — то это должно подсветиться одной строкой, так как вторая ' — экранируется слешем.

посмотри boost/spirit и пример к нему cpp_to_html.
Может поможет.
Re[5]: Подствека синтаксиса
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 31.08.04 13:50
Оценка: 3 (1)
Здравствуйте, DemAS, Вы писали:

[]

DAS> Хочу конвертер — на вход txt, на выходе расцвеченный html.

DAS> А что есть из готовых либ.... ?

Я когда-то писал и даже запостил в форум "Исходники" набор компонентов для дебилдера, предназначенных как раз для расцветки исходного кода в HTML. Конфигурится там цвет, шрифт и пр. по мелочи. При желании можно написать свой компонент, основываясь на том, что есть.

Вот, в общем: http://www.rsdn.ru/Forum/Message.aspx?mid=544934
Автор: Flamer
Дата: 19.02.04
Re[5]: Подствека синтаксиса
От: antonme Россия http://setia.ru
Дата: 31.08.04 14:55
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>Здравствуйте, alku, Вы писали:


A>>смотря что хотиш:

A>>- если расчет на то что надо в рантайме менять конфигурацию рассветки, то прийдеться повозиться самому
A>>- если просто под определнный язык надо сделать, то тогда надо смотреть в сторону уже готовых либ...


DAS> Хочу конвертер — на вход txt, на выходе расцвеченный html.

DAS> А что есть из готовых либ.... ?

DAS> Язык довольно специфичен и либу именно под этот язык найти не удастся, поэтому надо искать нечто очень конфигурабельное.

DAS> Например, если есть строка — 'stri\'ng' — то это должно подсветиться одной строкой, так как вторая ' — экранируется слешем.

В примерах к Boost'овскому regex'у есть такая штука — лежит в boost/libs/regex/example/snippets/regex_merge_example.cpp. Превращает cpp в подсвеченный html. Очень простая и меняется очень легко.
Re[3]: Подствека синтаксиса
От: Кодт Россия  
Дата: 31.08.04 15:35
Оценка: 8 (2)
Здравствуйте, DemAS, Вы писали:

DAS>Здравствуйте, alku, Вы писали:


A>>маленьки примерчик: /* new object() */ — но сначало это коментарий!!! а слова в середине тогда теряют свое назначение


DAS> Что посоветуешь ? Конечные автоматы ?


Твоя задача — это ровно то, что делает лексический анализатор любого языка. А они, как правило, построены на автоматных грамматиках.
Так что — конечный автомат, без сомнения, тебя удовлетворит.
Причём автомат должен выдавать результаты (скажем, строку </span><span class=keyword> ) при смене состояний, а не пребывая в состояниях.
То есть, по сути, это автомат Милли. Он описывается множеством четвёрок (state,input,next,output), где output не пуст, в случае, если автомат проходит через границу лексемы. В грубом виде, значение output — это
  • "<span class='$next'>' если state==BEGIN
  • "</span><span class='$next'>" если state!=next
  • "</span>" если next==END
  • "" если state==next.
    Хотя, конечно, по хорошему нужно различать границы лексем, принадлежащих одному классу. (Мало ли, захочется бордюр рисовать вокруг каждой из них). Пример: строка <<<<< на С++ будет разбита на 3 лексемы << << <
  • Перекуём баги на фичи!
    Re[4]: Подствека синтаксиса
    От: Hunta Украина http://dr-leafsey.livejournal.com
    Дата: 01.09.04 12:26
    Оценка:
    К>Твоя задача — это ровно то, что делает лексический анализатор любого языка.

    А что можно почитать в инете по этому поводу?
    Поступай так, чтобы максима своей воли в любое время могла стать принципом всеобщего законодательства.
    Re[5]: Подствека синтаксиса
    От: DoС  
    Дата: 17.09.04 14:45
    Оценка:
    Здравствуйте, DemAS, Вы писали:


    DAS> Хочу конвертер — на вход txt, на выходе расцвеченный html.

    DAS> А что есть из готовых либ.... ?

    посмотри http://colorer.sourceforge.net/
    ... << RSDN@Home 1.1.4 @@subversion >>
    Re[6]: Подствека синтаксиса
    От: wildwind Россия  
    Дата: 20.09.04 08:23
    Оценка:
    Здравствуйте, DoС, Вы писали:

    DoС>посмотри http://colorer.sourceforge.net/


    Точно. Из готовых либ — это Colorer.
    2 Кодт: Подсветка синтаксиса — это не обязательно лексический анализ. Colorer например работает на регэкспах.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.