Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> КС-грамматика языка программирования Си, где в инете взять? 
V
    Опции темы
Arks
  Дата 18.2.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.5.2006
Где: Барнаул

Репутация: нет
Всего: нет



Есть учебное задание, построить КС-грамматику сильно урезанной версии языка Си:
Цитата
Программа: Главная программа языка Си. Допускается описание функции без параметров допустимых в программе типов. Можно описать массив.
Типы данных: float, char. Можно описать массив данных этих типов.
Ну и так далее...


Я тут никак не могу один момент понять: что означает главная программа языка Си?
1) Это функция 'main'? Если так, то что значит "допускается описание функций" - они ведь описываются вне main'а...
2) Имеется ввиду весь *.cpp файл с описаниями переменных и функций в нём.


В общем к вам две просьбы:
1) Может вы лучше, чем я поймете постановку задачи - тогда объясните мне, пожалуйста.
2) Где в интернете можно найти грамматику Си или структурные схемы языка?
PM MAIL ICQ Skype MSN   Вверх
Kuvaldis
Дата 18.2.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Цитата

2) Где в интернете можно найти грамматику Си или структурные схемы языка?

Точно есть в приложении к Керниган, Ритчи "Язык программирования С"


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Daevaorn
Дата 18.2.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



http://www.devincook.com/goldparser/grammars/index.htm
набор граматик для различных языков. в формате для определеного парсера, но плизко к BNF
PM MAIL WWW   Вверх
Бонифаций
Дата 18.2.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



Хмм.. А почему вы решили что грамматика С - контекстно- сводбодная (КС) ? Насколько я знаю, она _не_ КС.

Добавлено @ 15:42 
по поводу грамматик - поройтесь на www.antlr.org


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Arks
Дата 18.2.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.5.2006
Где: Барнаул

Репутация: нет
Всего: нет



Бонифаций, вы правы. Но синтаксис языка - КС-грамматика. Именно это мне и нужно.
Всем спасибо, но это ещё не всё: помогите ещё чуть-чуть, плиз  smile 

Вот полное задание:
Цитата
Программа: Главная программа языка Си. Допускается описание функции без параметров допустимых в программе типов. Можно описать массив.
Типы данных: float, char. Можно описать массив данных этих типов.
Операции: арифметические и сравнения
Операторы: присваивания и while, и пустой оператор.
Операнды: простые переменные, элементы одномерных массивов и константы.
Константы: строковые, символьные и целые в 10 системе счисления.


Написал я эту грамматику:
Цитата

<программа>         ->    <программа><описания>
<описания>  ->    <данные>|<определение функции>
<данные>   ->    <тип><список>;
<список>     ->    <список>,<переменная>|<переменная>
<переменная>       ->    <идентификатор>|<идентификатор>[тип]
<тип>     ->    float|char
<определение функции> -> <тип><идентификатор>()<составной оператор>
<составной оператор>   ->    {<операторы и описания>}
<операторы и описания> -> <операторы и описания><данные> |      <операторы и описания><оператор> | ε
<оператор>  ->    <присваивание> | ; | <while>
<присваивание>    ->    <идентификатор> = <выражение>
<выражение>  ->    <выражение> == <выраж.1> | <выражение> != <выраж.1> +<выражение> | - <выражение> | ++<выражение> | --<выражение> |  <выражение>++ | <выражение> -- | <выраж.1>
<выраж.1>  ->    <выраж.1> < <слагаемое> | <выраж.1> <= <слагаемое> | <выраж.1> >= <слагаемое> | <выраж.1> > <слагаемое> | <слагаемое>
<слагаемое>  ->    <слагаемое> + <множитель> | <слагаемое> - <множитель> | <множитель>
<множитель>    ->    <множитель> * <эл. выраж.> | <множитель> / <эл. выраж.> | <множитель> % <эл. выраж.> | <эл. выраж.>
<эл. выраж.>  ->    <переменная> | <константа>
<константа>  ->    <константа строковая> | <константа символьная> |   <константа целая>
<константа строковая> -> “<текст>”
<константа символьная> -> ‘<один символ>’
<константа целая>    ->    <константа целая><цифра>|<цифра>
<идентификатор>    ->    <буква><окончание>
<окончание>  ->    <окончание><буква> | <окончание><цифра> | ε
<текст>  ->    <текст><один символ>| ε
<один символ>    ->    <буква> | <цифра> | …
<буква>  ->    a|b|c|…|z|A|B|C|…|Z
<цифра>  ->    0|1|2|3|4|5|6|7|8|9


Не могли бы вы проглядеть её? Особенно интерусует "одномерный массив" (это нетерминал <переменная>) и <константа строковая> - нормально реализованы?
Добавлю только, что грамматику выше надо рассматривать с позиции задания - в ней должно быть только то, что есть в задании и ничего больше - это так, чтобы не придирались, что она не полная  smile 

Заранее, спасибо.
PM MAIL ICQ Skype MSN   Вверх
Arks
Дата 20.2.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.5.2006
Где: Барнаул

Репутация: нет
Всего: нет



хз, понадобится ли кому-нибудь, но вот окончательный вариант:

Цитата
<программа>  ->    <программа><описания>
<описания>  ->    <данные>|<определение функции>
<данные>  ->    <тип><список>; | char<список char>;
<список char>  ->    <список char>,<переменная char>|<переменная char>
<переменная>    ->    <переменная общее>|<переменная char>
<переменная char>    ->    <идентификатор>[<константа>] = “<текст>”|     <переменная общее>
<список>  ->    <список>,<переменная общее>|<переменная общее>
<переменная общее> ->    <идентификатор>|<идентификатор>=<константа> | <идентификатор>[<константа>] |   <идентификатор>[<константа>]={<список констант>}
<тип>    ->    float|char
<определение функции> -> <тип><идентификатор>()<составной оператор>
<составной оператор>   ->    {<операторы и описания>}
<операторы и описания> -> <операторы и описания><данные> |      <операторы и описания><оператор> | ε
<оператор>  ->    <присваивание> | ; | <while> | <составной оператор>
<присваивание>    ->    <идентификатор> = <выражение>;
<while>  ->    while(<выражение>) <оператор>
<выражение>  ->    <выражение> == <выраж.1> | <выражение> != <выраж.1> +<выражение> | - <выражение> | ++<выражение> | --<выражение> | <выражение>++ | <выражение> -- | <выраж.1>
<выраж.1>  ->    <выраж.1> < <слагаемое> | <выраж.1> <= <слагаемое> | <выраж.1> >= <слагаемое> | <выраж.1> > <слагаемое> | <слагаемое>
<слагаемое>  ->    <слагаемое> + <множитель> | <слагаемое> - <множитель> | <множитель>
<множитель>    ->    <множитель> * <эл. выраж.> | <множитель> / <эл. выраж.> | <множитель> % <эл. выраж.> | <эл. выраж.>
<эл. выраж.>  ->    <переменная> | <константа>
<список констант>    ->    <список констант>,<константа>|<константа>
<константа>  ->    <константа строковая> | <константа символьная> |   <константа целая>
<константа строковая> -> “<текст>”
<константа символьная> -> ‘<один символ>’
<константа целая>    ->    <константа целая><цифра>|<цифра>
<идентификатор>    ->    <буква><окончание>
<окончание>  ->    <окончание><буква> | <окончание><цифра> | ε
<текст>  ->    <текст><один символ>| ε
<один символ>    ->    <буква> | <цифра> | …
<буква>  ->    a|b|c|…|z|A|B|C|…|Z
<цифра>  ->    0|1|2|3|4|5|6|7|8|9


П.С.: Лабу сдал.  smile 
PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.