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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализовать лексический анализатор на с++ для сво, ЛЕКСИЧЕСКИЙ АНАЛИЗАТОР 
:(
    Опции темы
Neon111
  Дата 23.4.2015, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствцйте!
У меня есть программа на основе которой нужно написать лексический анализатор,помогите пожалуйста
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <iostream>
#include <conio.h>
//---------------------------------------------------------------------------
 
using namespace std;
char* Rus(const char* text);   //Русификация
 
int main()
{
       int a;
    cout << Rus ("Введите сторону треугольника: ") <<endl;//ввод стороны
    cin  >> a;   //вывод стороны 
 
    cout << "\nh: " << sqrt(3.0) * a * 0.5;         // высота
    cout << "\nS: " << sqrt(3.0) * a * a * 0.25;    // площадь
    cout << "\nR: " << a / sqrt(3.0);               // радиус оп.окружности
    cout << "\nr: " << a / (2 * sqrt(3.0));         // радиус вп.окружности
 
        getch();// прерывание
    return 0;
 
}
char bufRus[256];  // Русификация 
char* Rus(const char* text)
{
 CharToOem(text,bufRus);
 return bufRus;
}

Само задание:Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиусы вписанной и описанной окружностей.
Таблица лексем и прочего вот вроде правильная:
ПРИМЕР РАБОТЫ ЛЕКСИЧЕСКОГО АНАЛИЗАТОРА  если понадобится
Используемый код типов лексем:
10 – директивы;
20 – разделитель;
30 – ключевые слова;
40 – константы.
Внутренние таблицы лексического анализатора в архиве..
если это понадобится,то еще вот дескрипторы
Дескрипторный текст:
(10,1)
(10,3)
(10,2)
(10,4)
(10,5)
(30,9)(20,1)
(30,10)(20,1)
(30,4)
(20,14)
(30,6)(40,5)(20,1)
(30,1)(20,2)(30,13)(20,8)(20,12)(40,6)(20,12)(20,9)(20,2)(30,14)(20,1)
(30,7)(20,11)(40,5)(20,1)
(30,1)(20,2)(20,12)(20,15)(40,1)(20,12)(20,2)(30,5)(20,8)(40,8)(20,9)(20,4)(40,5)(20,4)(40,9)(20,1)
(30,1)(20,2)(20,12)(20,15)(40,2)(20,12)(20,2)(30,5)(20,8)(40,8)(20,9)(20,4)(40,5)(20,4)(40,5)(20,4)(40,10)(20,1)
(30,1)(20,2)(20,12)(20,15)(40,3)(20,12)(20,2)(40,5)(20,3)(30,5)(20,8)(40,8)(20,9)(20,1)
(30,1)(20,2)(20,12)(20,15)(40,4)(20,12)(20,2)(40,5)(20,3)(20,8)(40,7)(20,4)(30,5)(20,8)(40,8)(20,9)(20,9)(20,1)
(30,2)(20,1)
(30,3)(20,1)
(20,13)
(30,8)(20,1)
(30,10)(20,1)
(20,14)
(30,11)(20,1)
(30,12)(20,1)
(20,13)
 помогите пожалуйста написать лексический анализатор к заданию половину задания сделала-осталось только это сделать:
пример лексического анализатора ниже-что то типо такого должно быть:
Код

#include <stdio.h>
#include <ctype.h>
# define NONE -1 // определение (не использовано)
# define NUM 256 // определение (не использовано)
main()
{
int lineno = 1; // инициализация переменной (номер строки)
int tokenval = 0; // инициализация переменной (накопительная величина)
int t; // инициализация переменной (текущий символ)
while(1) // начало цикла
{
t = getchar(); // ввод символа (с клавиатуры)
if (t == ' ' || t == '\t') ; // введен пробел или ТАБ ? (игнорируется)
else if (t == '\n') // иначе, введен ENTER?
lineno++; // номер строки увеличить на 1
else if (isdigit(t)) // иначе, введена цифра?
{ // ( да )
tokenval = t - '0'; // корректировка из символа в абс.значение
t = getchar(); // ввод символа
while(isdigit(t)) // пока символ - цифра
{ // ( цикл )
tokenval = tokenval * 10 + t - '0'; // корректировка: принятая цифра + прежняя сумма умн.на 10
t = getchar(); // ввод символа
}
ungetc(t, stdin); // - отправляет символ обратно в stdin
return t;
}
else // введена не цифра
{
tokenval = 0; // накопительная величина обнуляется
return t;
}
}
}
//---------------------------------------------------------------------------





Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Архив_WinRAR.rar 328,72 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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