IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> вопрос по синтаксическому анализу
Archon
сообщение 4.12.2008 12:13
Сообщение #21


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Дак я ее написал в своем посте:
Цитата
S -> IA(B
A -> ,IA
A -> :
B -> I:IC
B -> )
C -> ,IC
C -> )



--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1147
сообщение 4.12.2008 12:56
Сообщение #22


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


вопрос с литературой можно оставить..
У меня вот что получилось: Грамматика языка: G=({V,N,T}, {S,A,B}, P,S)
S→ NA(B
A→ ,NA
A→ :
B→ V:TC
B→ )
C→ ,V:TC
C→ )
можем мы взять за основу эту грамматику чтобы построить таблицу (я к сожалению так и не понял как ее строить, объясни пожалуйста как формируется горизонтальная строка) и затем автомат? Потому что на обсуждение других вопросов уже нет времени...

Сообщение отредактировано: 1147 - 4.12.2008 12:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 4.12.2008 20:24
Сообщение #23


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Ну, для начала скажи, что с вас будут требовать. У нас надо было к схеме придумать грамматику, составить мп-автомат и написать прогу. Если у вас хватит того, что есть на твоем примере, то вот автомат:
Прикрепленное изображение
Это не МП-автомат, а вообще какой-то недетерминированный, но для твоих целей удобный. По горизонтали - лексемы. По вертикали - состояния. На схеме отмечены какой позиции, какое состояние соответствует. На каждом шаге берем следующую лексему, и в зависимости от текущего состояния находим клетку. е - ошибка, к - все нормально, конец проверки. число - переход в новое состояние. Программа для реализации такого автомата элементарна и записана у тебя в примере.
Цитата
У меня вот что получилось: Грамматика языка: G=({V,N,T}, {S,A,B}, P,S)
S→ NA(B
A→ ,NA
A→ :
B→ V:TC
B→ )
C→ ,V:TC
C→ )
Грамматика правильная за исключением набора терминальных символов - туда следует добавить знаки препинания. Только в примере автомат строится сразу, обходя этап построения грамматики. Поэтому сам решай, нужна ли она тебе вообще.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1147
сообщение 4.12.2008 20:33
Сообщение #24


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


да вот и я не понимаю зачем вообще нужна эта грамматика. Для чего ее составляют? Она как то используется в программе?
На помощь в написании программы я могу расчитывать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 4.12.2008 20:41
Сообщение #25


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Если с вас грамматику не требуют, то просто забудь о ней. Составляют её для порядка, чтоб была =). Считается, что МП-автомат с ней построить проще. Но раз уж мы решили не использовать МП-автомат то я не вижу смысла составлять грамматику. Если тебе всё равно интересно, то я объясню, как на основе такой грамматики построить МП-автомат.

На помощь в написании программе ты расчитывать конечно можешь =)


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1147
сообщение 4.12.2008 20:42
Сообщение #26


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


А вообще требования к заданию у нас такие же как были и у вас. Составить грамматику->автомат->программу.

Добавлено через 3 мин.
Да, мне было бы интересно узнать как на основе такой грамматики построить МП-автомат.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
1147
сообщение 6.12.2008 14:41
Сообщение #27


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


хотя на это уже нет времени... помоги пожалуйста написать программу для конечного автомата по последней таблице и все
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 6.12.2008 23:55
Сообщение #28


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Код
const
    a: array[1..7, 1..6] of integer = (
        (2, 8, 8, 8, 8, 8),
        (8, 8, 3, 1, 8, 8),
        (8, 8, 8, 8, 4, 8),
        (8, 5, 8, 8, 8, 9),
        (8, 8, 6, 8, 8, 8),
        (7, 8, 8, 8, 8, 8),
        (8, 8, 8, 6, 8, 9)
    );

function Decode(c: char): integer;
begin
    case c of
        'I': Decode := 1;
        'T': Decode := 2;
        ':': Decode := 3;
        ',': Decode := 4;
        '(': Decode := 5;
        ')': Decode := 6;
    end;
end;

var
    s: string;
    state, i: integer;
begin
    Write('Введите строку для анализа: ');
    ReadLn(s);
    state := 1;
    for i := 1 to Length(s) do begin
        state := a[state, Decode(s[i])];
        if state = 8 then Break;
    end;
    if state = 9 then
        WriteLn('Строка верна')
    else
        WriteLn('Строка ошибочна');
end.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 7.12.2008 18:57
Сообщение #29


Гость






Как должна выглядеть входная строка чтобы программа выдала сообщение что она верна?? Вот например я ввожу корректную строку: a:(), но программа считает ее невернойsad.gif
 К началу страницы 
+ Ответить 
Archon
сообщение 7.12.2008 21:43
Сообщение #30


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Ну конечно. Она реализует строго тот автомат, что я привел в таблице выше. Все допустимые символы прописаны в ее верхней строке. Таким образом, правильной строкой будет например: I,I,I:(T:I,I,I). То есть идентификаторы и тип свернуты в соответственно I и T. Если хочешь, чтобы программа сама распознавала идентификаторы вроде a, b, c1, test00 и т.п., а также типы вроде integer, double и другие, надо добавить в нее лексический анализатор.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 7.12.2008 22:33
Сообщение #31


Гость






Ты мог бы это сделать?!? сам я точно не успею-вторник крайний срок сдачи
 К началу страницы 
+ Ответить 
Archon
сообщение 7.12.2008 23:09
Сообщение #32


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Ну уж нет. И так все уже за тебя сделал. К тому же, не ясно, каким образом проводить лексический анализ. Тоже через автоматы? В любом случае, попробуй сделать сам. Я подскажу, если что не получится. Если обобщить, то тебе нужна функция, которая берет на вход строку типа "ident1,a,x,abc000:(integer:int1,int2,temp)" и возвращает эту же строку со свернутыми лексемами: "I,I,I,I:(T:I,I,I)".


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 15.12.2008 17:39
Сообщение #33


Гость






Archon, программу я сдал наконец-то. Хочу выразить тебе благодарность за неоценимую помощь. Один бы я не справился. Кроме того эта тема, как мне кажется, очень полезна для форума, т.к. она единственная где так подробно разбирается синтаксический анализатор.
Большое спасибо! good.gif
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.04.2024 12:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"