Генератор лексического анализатора LEX

Тема в разделе "WASM.BEGINNERS", создана пользователем uni, 21 дек 2008.

  1. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Люди, человеки...

    Есть ли в рунете человеческое описание на достойном русском языке как практически (т.е. буквально десятки примеров) использовать LEX?

    Есть задачка. Задан текстовой файл с описанием электрической схемы:

    C1 0 4 10N
    L1 2 Out 1
    L2 Out 4 1
    R1 In 2 100
    R2 0 Out 10K
    V1 In 0 0

    Нужно по имеющимся правилам составить специальную матрицу для формирования уравнений Кирхгофа.
    Мне нужна часть, которая считывает такой файл списка межсоединений, осуществляя разбор на токены. Именно считвает по НАУКЕ, а не поделка на раз, если кто разницы не понимает.

    Если нету на русском, то можно и на английском, только ПРАКТИЧЕСКУЮ с примерами, а не тупыми заменами комментариев с С на С++.

    Сам я прошёл курс по созданию компиляторов на intuit.ru, где есть более менее достойное, но далеко не исчерпывающее описание. Может форум есть какой, где есть хотя бы один практик по этому делу? Спросить даже не у кого.
     
  2. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    Я изучал его по официальному мануалу и примеру парсера для языка С
    если вдруг у тебя другая реализация, я говорю про FLEX
    Проблем не было никаких...
     
  3. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    uni

    А чем именно не устраивают мануалы? Например http://flex.sourceforge.net/manual/ содержит все необходимое, включая примеры, разобраться можно за пару дней. Если не нравится реализация на С, можно смотреть в сторону других языков - их более чем достаточно. В чем конктретно возникают трудности?
     
  4. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Сложность в том, что примеры либо слишком простые, либо совсем заумные, наподобие описания всяких языков.
    У меня нет никакого желания изучать весь (f)lex со всеми его возможностями, тем более за пару дней. Думаю, что это не возможно.

    Я хочу переделать под себя, на основании понимания, какой-нить чужой пример. Вот их то и не нахожу похожих. Написать необходимую спецификацию - это ещё пол дела. Мне нужно реализовать её на maple-языке программирования. Т.е. переделать весь стандартный код C на maple. Это нужно для того, что манипуляции с получающимися матрицами элементарно делать именно в системе компьютерной математики, т.к. мне нужны аналитические (символьные) вычисления (кои никакие ЯВУ, конечно, не поддерживают).

    У меня уже есть пример на maple, в котором считываются данные из такого файла, потом кустарным способом парсируются и далее идёт аналитика. Так вот мне нужно заменить кустарный парсер - "человеческим", то бишь построенным на основе спецификации - в нём я за разбор выражений буду уверен.

    Если я буду сюда постить свои "труды" по созданию спецификации, то могу надеятся на помощь? Имею желание разобраться. Но начать всегда трудно.
     
  5. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    uni
    Ты хочешь переписать сгенеренный парсер на мэпл??
    Бесполезняк, лучше сразу забудь. К тому же, если реклама не врет, в мапле есть интеграция с программами на С... может получившийся парсер можно будет подрубить к твоему проекту
     
  6. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    А думал, что стандартный код будет не сложнее калькулятора, который приведён у Страуструпа в книжке по C++. Или не так?

    Там идёт разбор выражений по токенам. Я когда-то модифицировал его пример, потому не так страшно :) Добавлял поддержку математических функций.

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

    Проще написать парсер, чем программу по решению системы уравнений для произвольной схемы.

    Но над подключением Си (++) кода я подумаю.
     
  7. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    uni
    парсер, сгенерированный LEX-ом состоит из таблиц и жуткого вида кода
    Все вместе занимает минимум 2-3 тыс. строк
    вручную это переводить на другой язык - очень неблагодарная работа