Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
#1

Составление грамматики - C++

19.02.2013, 18:45. Просмотров 1024. Ответов 7
Метки нет (Все метки)

Кто делал задачу из книги Страуструпа "Принципы и практика использования С++":

Напишите программу, проверяющую корректность предложений в соответствии с правилами грамматики английского языка из раздела 6.4.1. Будем считать, что каждое предложение заканчивается точкой, окруженной пробелами. Например, фраза birds fly but the fish swim . является предложением, а фразы but birds fly but the fish swim (пропущена точка) и birds fly but the fish swim. (перед точкой нет пробела)— нет. Для каждого введенного предложения программа должна просто отвечать “Да” или “Нет”. Подсказка: не возитесь с лексемами, просто считайте строку с помощью оператора».

Последняя подсказка только запутывает. До этого учился делать калькулятор по его схеме, не пойму, там аналогичный принцип использовать? и вообще, щас голова не работает вообще....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 18:45     Составление грамматики
Посмотрите здесь:

По поводу грамматики - C++
Поясните почему следующее не правильно #define TEXT_HELLOW(name) '\"' ## HELLOW##name ## '\"' ... main(...){ ... ...

Страуструп. Грамматики. Парсер - C++
Собственно начал читать этого дядьку и наткнулся на парсер. Он объясняет суть парсинга с использование грамматик. Однако с грамматиками я...

Сделать вывод КС-грамматики - C++
Помогите пожалуйста реализовать программу 1. S->SaS 5. A->b 2. S->A 6....

Реализация анализатора LL(1)-грамматики - C++
Доброго времени суток! Необходимо разработать программную реализацию синтаксического анализатора LL(1)-грамматики и соответствующей...

Создание правильной грамматики - C++
Сделал простой парсер с действиями + и - .(Максимально следовал Страуструпу) Но выражение типа 10-2+2 считается как 10-(2+2) и в итогк...

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

Конечные автоматы и грамматики - разобрать код - C++
Доброе утро!Добрые люди сделали программу построения конечных автоматов по регулярным грамматикам.Она рабочая,просто я не могу разобраться...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
19.02.2013, 19:07     Составление грамматики #2
Цитата Сообщение от strange_man Посмотреть сообщение
Подсказка: не возитесь с лексемами, просто считайте строку с помощью оператора».
Старина Бьерн просто говорит тебе, заведи переменную под хранение обрабатываемой строки, которую вводи целиком перед анализом, скажем, так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
using namespace std;
 
int main()  {
 
    /* подготавливаем анализируемую строку */
    string inputStr;
    getline( cin, inputStr );
    
    cout << inputStr << endl; // вот она, наша строка
 
    return 0;
}
Вообще, когда речь идет об анализе строки на соответствие грамматике - в качестве элементов выступают "лексемы". Данное понятие фигурирует повсеместно в области, например, построения трансляторов. Лексемами тут можно было назвать birds, fly, и т.д., т.е. наборы символов, разделенных пробелом.

Старина Бьерн считает, что тебе целесообразнее обрабатывать строку целиком на предмет наличия в ней точки, окруженной пробелами. Мне так думается)
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
19.02.2013, 19:09  [ТС]     Составление грамматики #3
только точки???
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
19.02.2013, 19:39     Составление грамматики #4
Ну это как тебе вздумается, скажем, формулировка задания не запрещает мне следующую строку считать предложением:

asd834r9238u9f 98359 78h&)&Y^)(*&@#&^ .

Поскольку единственный критерий, который там обозначен - окружение пробелами. Впрочем, там фигурирует фраза "английский язык", значит, полагаю, целесообразно так же смотреть, входят ли символы в предложении в область допустимых значений, коей является множество латинских символов.
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
21.02.2013, 18:13  [ТС]     Составление грамматики #5
и все же, я все равно не могу понять, как определить наличие точки, окруженной пробелами
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
21.02.2013, 18:59     Составление грамматики #6
C++
1
2
3
4
if(str[i]==' ')
    if(str[i+1]=='.'&&str[i+2]==' '){
        //...
    }
Добавлено через 48 секунд
только нужно помнить про длину если используете string или про нульбайт, если char
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
21.02.2013, 19:11  [ТС]     Составление грамматики #7
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
if(str[i]==' ')
    if(str[i+1]=='.'&&str[i+2]==' '){
        //...
    }
Добавлено через 48 секунд
только нужно помнить про длину если используете string или про нульбайт, если char
спасибо, правда я не уверен, что в учебнике было сказано о "прохождении" по строке с помощью цикла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2013, 07:16     Составление грамматики
Еще ссылки по теме:

Как выглядит код грамматики Хомского? - C++
Как выглядит код грамматики Хомского?

Неверная реализация синтаксического анализатора LR(1)-грамматики - C++
Здравствуйте. Есть реализация синтаксического анализатора LR(1)-грамматики. Программа должна получить строку p$ или ivtpe$ и сообщить,...

Организация регулярной грамматики используя конечный автомат, представленный в виде графа - C++
Доброй ночи! Организация регулярной грамматики с помощью конечного автомата, представленного в виде графа. Хочу попросить у вас помощи....

Составление функций - C++
Составить блок-схему и разработать программу, которая по заданным вершинам треугольника в прямоугольной декартовой системе координат...

Составление матрицы - C++
не пойму где ошибка? #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;fstream&gt; #include &lt;stdio.h&gt; #include &lt;locale.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
22.02.2013, 07:16     Составление грамматики #8
ну если у вас в 1й строке одно предложение, либо они какимто образом заданы в массиве, но в одном, то тогда можно проверять 3 последних элемента. Если же несколько строк в одном массиве, то тут уже никак без цикла
чтото типо
C++
1
2
3
4
int len=strlen(str);//char
if(str[str.size()]==' '&&str[str.size()-1]=='.'&&str[str.size()-2]==' '){//str[len]==' '&&str[len-1]=='.'&&str[len-2]==' ' char
    //...
}
Yandex
Объявления
22.02.2013, 07:16     Составление грамматики
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru