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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синтаксический анализатор, bison + flex 
V
    Опции темы
Kofgarter
Дата 30.3.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите написать прогу, которая будет переводить номера в тексте -> из римского представления в арабское.
Использовать нужно анализаторы - bison и flex.

Лексический анализатор, который выделяет в тексте римские числа я написал (roman.l):
Код

%option noyywrap
%{
    int tokenCount=0;
%}
%%
[^IVX]+ { printf("%s", yytext); }
[IVX]+ { printf("{%s->...}",yytext); }
%%

main()
{
    yylex();
}


Когда откомпилируете и запустите: prog.exe < temp.txt - он выведет текст, вида: текст ... {IX->9} ... текст

Еще нашел лексический анализатор, который переводит римские числа в арабские:
Код

%option noyywrap

WS    [ \t]+

%%
    int total=0;

I    total += 1;
IV    total += 4;
V    total += 5;
IX    total += 9;
X    total += 10;
XL    total += 40;
L    total += 50;
XC    total += 90;
C    total += 100;
CD    total += 400;
D    total += 500;
CM    total += 900;
M    total += 1000;

{WS}    |
\n    return total;
%%
int main (void) 
{
   int number;

   number = yylex ();

   printf ("You have just entered: %d\n", number);
   return 0;
}


Но проблема в том, что ему без разницы, что мы введем IIX, или VIII… или IVX.

Как написать синтаксический анализатор, который будет проверять корректность записи римского числа?

Это сообщение отредактировал(а) Kofgarter - 30.3.2009, 22:24
PM MAIL   Вверх
Dmi3ev
Дата 30.3.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

Как написать синтаксический анализатор, который будет проверять корректность записи римского числа?

руками  smile 
а если серьезно, то:
Kofgarter,  ты правда думаешь, что все тут всё побросают и будут тебе писать анализатор???
кроме поисков в интернете, может еще что-нибудь попробовать, например начать программировать...


--------------------

PM MAIL   Вверх
Kofgarter
Дата 31.3.2009, 00:10 (ссылка)  | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dmi3ev smile , в таком случае Вам вообще не стоит заходить на форум!, а тратить свое время на более полезные вещи smile 

зы: видно Вы никогда не работали с анализаторами, они как раз рассчитаны для того чтобы не писать гениальные коды, типа:
Код

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int i=0;
    string s1="I want change it";
    string s2="want";
    string s3="this is my new text";
    cout<<"before: "<<s1<<endl;
    while ((i=s1.find(s2,i+1))!=string::npos)
        s1.replace(i,s2.length(),s3);
    cout<<"after: "<<s1<<endl;
    system("pause");
    return 0;


smile 

Это сообщение отредактировал(а) Kofgarter - 31.3.2009, 00:13
PM MAIL   Вверх
Anikmar
Дата 31.3.2009, 00:17 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Kofgarter
Цитата(Kofgarter @  31.3.2009,  00:10 Найти цитируемый пост)
для того чтобы не тратить время на написание гениальных кодов, типа

1. Данный гениальный код был написан в помощь, как обучающий.

Цитата(Kofgarter @  31.3.2009,  00:10 Найти цитируемый пост)
видно Вы никогда не работали с анализаторами,

2. Вы не предлагаете научиться работать в анализаторе, а спрашиваете вот это:
Цитата(Kofgarter @  30.3.2009,  21:22 Найти цитируемый пост)
Как написать синтаксический анализатор


3. Вам ответили совершенно ясно и четко - на столько, на сколько конкретный вопрос вы поставили.

4. Правила вежливости: Заходя в комнату, где беседует много людей, сначала прислушиваются к разговору, затем потихоньку вмешиваются и только через достаточно длительное время дают советы как вести себя этим людям в комнате.
А вы - с места в карьер. Нехорошо-с...

PM MAIL ICQ   Вверх
Kofgarter
Дата 31.3.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Господа уже написал! 
В любом случае спасибо за проявленный к топику интерес  - Аш >58 просмотров!!  smile
PM MAIL   Вверх
Soah
Дата 31.3.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kofgarter @  31.3.2009,  00:10 Найти цитируемый пост)
они как раз рассчитаны для того чтобы не писать гениальные коды, типа:

Ну так изобразите, маэстро smile 
PM MAIL   Вверх
Dmi3ev
Дата 31.3.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

в таком случае Вам вообще не стоит заходить на форум!

это я уж без тебя разберусь...
Цитата

а тратить свое время на более полезные вещи 

это тоже осилю без тебя...
Цитата

видно Вы никогда не работали с анализаторами

из чего это видно? я как-то делал анализатор, правда математических выражений...
Цитата

они как раз рассчитаны для того чтобы не писать гениальные коды, типа...

это был пример, за который, кстати, человек сказал спасибо, поэтому не понимаю что ты этим хочешь сказать...
Цитата

они как раз рассчитаны для того чтобы не писать гениальные коды, типа...

ну не пиши... я не заставляю... если тебе ничего писать не надо (все уже готово), тогда чего ты тут делаешь???
короче, Kofgarter, выкладывай свои наработки, задумки, тогда поговорим...  smile 
а пустословить и оскорблять на расстоянии - много ума не надо...  smile 

PS если бы ты был рядом, был бы не так дерзок  smile

Добавлено через 34 секунды
Цитата

Ну так изобразите, маэстро 

 smile  smile 


--------------------

PM MAIL   Вверх
Kofgarter
Дата 31.3.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Та пожалуйста, надеюсь Вам пригодится! smile

Код

%{
     void yyerror(char *);
     int last = 0;
%}

%token blank numeral
%start text
%%

text 
    : number
    {
            return $1; 
            $$=$1;
    }
    | text blank number
    {
            return $3; 
            $$=$3; 
            last=0; 
    };

number
    : numeral 
    { 
            last=$$=$1; 
    }
    | numeral number 
    { 
            if ($1 >= last)
                   $$ = $2 + (last=$1);
            else 
                   $$ = $2 - (last=$1); 
    };
%%

#include "lex.yy.c"

void yyerror(char * s)
yacc error handler *
{
    fprintf (stderr, "%s\n", s);
}
int main(void) 
{
    return yyparse();
}


Dmi3ev, вот на что идет время! Вопрос задавался господам которые могут сразу ответить, если хотите - экспертам!
А давать советы в таком духе, я Вас не просил. Прочтите первое предложение!

Тема закрыта!

Это сообщение отредактировал(а) Kofgarter - 31.3.2009, 01:26
PM MAIL   Вверх
zim22
Дата 31.3.2009, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



 smile 
Цитата(Kofgarter @  31.3.2009,  01:10 Найти цитируемый пост)
Тема закрыта!

а вот и нет  smile 


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0829 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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