Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Синтаксический анализатор  (Прочитано 7360 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sd
Постоялец

by
Offline Offline

« : 16-12-2012 12:17 » 

Ребят, доброго всем времени суток. Столкнулся со следующей проблемой: есть эмулятор микропроцессора intel8086, необходимо написать для него UI, с помощью которого пользователь сможет вводить команду в процессор. Допустим, есть в UI клавиша "БТ", предназначенная для просмотра/изменения содержимого ячейки памяти и есть клавиша "РЕГ" для получения содержимого регистра.
В зависимости от параметров команды БТ можно просто просмотреть содержимое, а можно его изменить.  Если содержимое адресуемой ячейки просмотрено, то нажимают клавишу "." для завершения команды или клавишу "," для просмотра следующей ячейки памяти. Например:
БТ 0x4, - покажет содержимое по адресу 0x4
БТ 0x4, 0xf9, - установит значение 0xf9 по адресу 0x4 и покажет содержимое по адресу 0x5
БТ 0x4, 0xf9, 0xa3 - установит значение 0xf9 по адресу 0x4 и установит по адресу 0x5 значение 0xa3.
То есть если есть данные с помощью запятой мы устанавливаем данные и переходим на след. адрес, а если запятой нет - просто просматриваем содержимое текущего адреса и переходим на след. адрес.
Но может быть еще и так
БТ РЕГ AX, 0xf9. - устанавливает значение, 0xf9 по адресу, который храниться в регистре AX.
БТ РЕГ AX, 0xf9, 0xa3 - устанавливает значение, 0xf9 по адресу, который храниться в регистре AX, а по следующему адресу - значение 0xa3.
Собственно в чем вопрос, как мне вызывать соответствующие функции эмулятора микропроцессора при соответствующих командах?

Надеюсь, что все понятно объяснил. Если есть идеи, как решить проблему - подскажите пожалуйста.
Спасибо.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-12-2012 13:16 » 

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

Способы определения синтаксиса можно почерпнуть в любом толковом учебнике по теории формальных языков. Выбирайте любой по вкусу. Лично я предпочел бы БНФ или конечный автомат.

Синтаксический анализатор можно написать самому, руководствуясь конкретной грамматикой, или воспользоваться готовой реализацией (например, стандартными YACC/Bison). На низком уровне для наделения своего языка семантикой применить подходящие паттерны, например, Command.

Вроде всё.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
sd
Постоялец

by
Offline Offline

« Ответ #2 : 16-12-2012 13:24 » new

А если как-нибудь проще? Например, через регулярные выражения? Возникла у меня такая мысль, только я не придумал еще как ее доработать. Например, выражение БТ РЕГ AX, 0xf9, 0xa3 можно представить как-нибудь так:
<cmd>СЛ</cmd><addr><cmd>REG</cmd><data>AX</data></addr>, <data>0xf9</data>,<data>0xa3</data>
Но как потом его грамотно обработать?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 16-12-2012 14:28 » 

Нужно строить автомат
Регулярное выражение хорошо для  "регулярных" выражений.
В случае автомата, действия анализатора - предсказуемы.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sd
Постоялец

by
Offline Offline

« Ответ #4 : 16-12-2012 17:05 » 

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

ru
Offline Offline

« Ответ #5 : 18-02-2013 06:06 » 

Поищите в гугле по запросу "разбор языка yacc bison", например, или что-то подобное. Навскидку:
http://www.ibm.com/developerworks/ru/edu/au-lexyacc/index.html
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines