Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Меню и список Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились: Введите элемент и номер. вот сам код: #ifndef __list_h #define __list_h #include <iostream> https://www.cyberforum.ru/ cpp-beginners/ thread41194.html C++ Здравствуйте! Не могу поместить class в один файл с программой. file.hpp
#include "Cat.hpp" // здесь классы "2)" Cat::Cat(int initialAge) { itsAge = initialAge; } Cat::~Cat() {
C++ Массивы строк https://www.cyberforum.ru/ cpp-beginners/ thread41179.html
Привет всем! Задан массив строк. Как узнать который символ встечаетса найбольшое количество раз в етом массиве?
C++ вывод на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер Please, help me!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо исправить код, чтоб фигуры не исчезали за экран (т.е. 640х460) и были компактным набором, т.е. двигались неменяя своего положения относительно друг друга и стукаясь об стенку экрана меняли свое... https://www.cyberforum.ru/ cpp-beginners/ thread41152.html
Округление дробного числа до целого в большую сторону. C++
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) программа не округляет это число (в большую сторону) до 4. Перелопатил тонны литературы, но пропустил или не нашёл этого, большая просьба написать функцию которая могла бы это делать, или способ какой.
C++ Код из Delphi в C++ https://www.cyberforum.ru/ cpp-beginners/ thread41137.html
Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; var d:array of longint; procedure c; var a,b,i:longint;
C++ массив структур и функции https://www.cyberforum.ru/ cpp-beginners/ thread41103.html
Разработать модель прайс-листов по комплектующим. Каждую единицу оборудования должна описывать соответствующая структура (например, структура, описывающая видеокарты или мониторы), объект которой может входить в прайс-лист. Соответственно, прайс-лист - это массив структур, каждая из которых хранит один из вариантов оборудования и его цену. Написать функции для создания, удаления,...
C++ Таймер не работает в Turbo C++
Реализовал таймер в Visual C++. #include "stdafx.h" #include <iostream.h> #include <conio.h> #include <time.h> #include <stdio.h> #include <stdlib.h> const int N=100000000;
C++ не могу завершить код :( https://www.cyberforum.ru/ cpp-beginners/ thread41093.html
он меняет 1 слово из фаила example.txt затем создоёт vasea-out.txt с уже изменёным текстом.. но он меняет только 1 слово.. как сделать чтобы он менял болише слов к приемру в example.txt написано "Вася хороший мальчик" водим "Вася хороший" затем водим "Жора плохой" и получаем в vase-out.txt "Жора плохой мальчик" за ранее спасибо #include <iostream> #include <fstream>
C++ MS VC++ 6.0:Как "подавить" выдачу конкретных варнингов в конкретных местах? Не хочу, чтобы выдавались конкретные варнинги, относящиеся к определённым областям заданных файлов. Как это сделать. Про "Warning Level" в насторйках студии я в курсе. Но мне нужно подавить варнинг с конкретным номером (К примеру C4244). И только в определённых местах заданных файлов. В том числе в системных файлах библиотек компилятора. Можно это как либо сделать? https://www.cyberforum.ru/ cpp-beginners/ thread41092.html
Последний метод итераций C++
Здравсвуйте программисты! Спасибо за ответы на предыдущие посты. Осталось решить методом итераций систему уравнений. Вчера Сазари мне подсказал как делать методом Зейделя, осталось методом итераций. Вот попробывал собрать код методом итераций, но дело в том,что результат системы уравнений равен по -1, все 4 уравнения, подскжаите пожалуйста где в данном коде мождет быть проблемма. Загвоздка в...
C++ не переводит из string в char* помогите пожалуйста задание: операции со строками с использованием шаблона string #include <algorithm> #include <iostream> #include <string> #include <conio.h> using namespace std; https://www.cyberforum.ru/ cpp-beginners/ thread41080.html
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.07.2009, 11:04 0

Пишем свой интерпретатор языка BASIC - C++ - Ответ 207405

02.07.2009, 11:04. Показов 242520. Ответов 464
Метки (Все метки)

Ответ

Отсмотрю попозже или вечером. Вкратце пока то, что с ходу могу ответить

Чтобы не пуатть терминологию, не слудует называть деяние "дебаггером". Более правильно - "внутренние отладочные печати" или "внутренняя отладка", чтобы не путать с программой-отладчиком (которая и есть "дебаггер")

Удобнее для разных фич делать внутреннюю отладку под разными макросами. Т.е. парсер печатать под одним макросом, таблицу переменных под другим и т.п. Когда программа разрастётся, то суммарная выдача станет очень большой, а потому надо уже делить мух от котлет

Комментарии лучше пищи на русском. По собственному опыту знаю, когда слабо владеешь языком, то уже через неделю сложно будет понять, что же ты там описал ломанным английским

> // Что и каким образом передаётся в функцию?

В функцию не должно передаваться ничего. Смысл следующий. Ты вызываешь parser_GetToken, которая в процессе работы взводит 4 глобальных переменных. А процедура parser_PrintCurToken просто печатает эти 4 значения. Т.е. пара этих процедур работает симметрично: одна записывает результат, другая его читает и печатает

> если ещё не надоел

Попробую пояснить попроще. Как-то меня начальник спросил, считаю ли я себя хорошим специалистом. Я ответил что нет, потому как считаю, что без того, чтобы кого-то обучать (обучить) хорошим специалистом никогда не станешь. Заниматься преподаванием мне как-то неинтересно, ибо обучшение материала строго по плану и по расписанию - это попросут затратить кучу усилий практически впустую. В твоём же случае немного по другому. Ты сам в этом процессе заинтересован, пинать тебя не надо. Программирование - работа творческая, она не может идти по расписанию. Когда ты хочешь - ты программируешь. И программируешь то, что интересно, а не то, что записано в плане. Когда есть желание и заинтересованность - то производительность работы очень высокая. Поэтому я считаю, что всё (или почти всё), что я тебе рассказываю - оно оказывается с пользой для дела. Поэтому в том числе и в моих интересах, чтобы ты довёл эту работу до какого-то логически завершённого состояния.

Добавлено через 51 минуту 10 секунд
Ну будещее. Выкладывай исходники в двух экземплярах:
1. Так, как ты уже делаешь (чтобы с форума просто посомтреть можно было)
2. Заархивируй весь каталог с исходниками (чтобы к себе по простуму скопировать и запустить)

Добавлено через 2 минуты 4 секунды
Да, вот ещё. Посмотри ещё у меня в исходниках судоку как сделано ASSERT. Это внутренние самопроверки. Для порядку тоже учись этой вещью пользоваться. Если непонятно, что это - поясню

Добавлено через 5 минут 49 секунд
Ну и сразу концептуальное замечание. В debugger_Print у тебя стоит switch. В таких случаях надо обязательно лепить ветку default, в которой помещать вызов FatalError (ну или как там её назвать). В один прекрасный расстановка таких условий в недостижимых точках и ASSERT'ы сэкономят тебе кучу времени при отладке

Добавлено через 14 минут 23 секунды
Ну и ещё момент. У тебя отладочная печать принудительно срётся в файл. Здесь бы по аналогии с разделением флага DEBUG сделал разделение выходного файла. Т.е. завёл бы глобалы "ofstream debug_FileParser, debug_FileVarTable", сделал бы процедуру инициализации debug_Init, в котором бы делал открытие данных файлов. А дальше уже по ситуации. Если тебе удобно раздельная печать - открываешь два разных файла. Если тебе удобно видеть их совместно (когда надо понять, что в каком порядке запускается), то один файл открываешь, а для второго делаешь типа "debug_FileVarTable = debug_FileParser". Если нужно печатаь на экран, а не в файл, то просто "debug_FileParser = cout; debug_FileVarTable = cout;". В итоге получается, что у тебя всё гибко, а менять код надо только в одной процедуре

Кстати, выше я писал, что в parser_PrintCurToken не надо ничего подавать (я обычно исхожу из того, что печать всегда идёт на экран). В данном случае ты поступил абсоютно правильно, подав сюда указатель на файл (правда назвал его неправильно и имя параметра у тебя перекрывает имя глобальной переменной). Процедура печати должна только печатать. А куда печатать - это пускай разбираются "наверху" и подают файл параметром.

Содержимое печати (т.е. то, что ты увидишь) удобнее было бы не тупо 4 значения (при этом надо помнить, что на какой позиции находится), а что-то типа следующего. Для строки "LET a=51"

file="source.bsc", line=1, token=KW_LET, token_str="LET"
file="source.bsc", line=1, token=IDENT, token_str="a"
file="source.bsc", line=1, token=DELIM_EQUAL, token_str="="
file="source.bsc", line=1, token=CONST_INT, token_str="51"

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

Добавлено через 38 секунд
Нумерацию строк принято начинать с 1, а не с 0

Добавлено через 21 минуту 25 секунд
Посмотрел твой вариант GetToken - моск сразу же сломался

Ещё раз формальное описание грамматики (чтобы перед глазами было)

Код
Const = ConstInt | ConstFloat
ConstInt = Digit { Digit }
ConstFloat = Digit { Digit } "." Digit { Digit }
Ident = Letter { Letter | Digit }
Letter = "A" | "B" | ... | "y" | "z"
Digit = "0" | "1" | ... | "9"
KeywordLet = "LET"
KeywordPRINT = "PRINT"
Правильное построение примерно такое:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Пропускаем все пробелы и знаки табуляции
 
// Если текущий символ - латинская буква, значит это начало ключевого слова
// или идентификатора. Если текущий символ - цифра,значит это
// начало константы. В остальных случаях это хз что
if (isalpha(...))
{
  // Читаем из потока до тех пор, пока имеем букву или цифру,
  // таким образом формируем целое слово. После чело проверяем,
  // это является ли слово ключевым. Если да, то это keyword,
  // иначе идетификатор
  while (...) { ... }
} else if (isdigit(...))
{
  // Для простоты пока читаем до тех пор, пока умеем цифру или точку
  // Опять получаем слово. Если оно содержит точку, значит плавающая
  // константа, иначе целочисленная
  // Но потом код надо будет аккуратно передалать, чтобы "1.1.1" не воспринималось
  // как единый токен.
  while (...) { ... }
} else
{
  // Разбираем delimiter'ы. Выбирай для себя способы, которыми задаются
  // комментарии, пропустить их тоже можно будет здесь (после чего сделать
  // goto на начало разбора). В скриптовых языках принято, что комментарий
  // начинается символом '#' и заканчивается в конце строки
}


Вернуться к обсуждению:
Пишем свой интерпретатор языка BASIC C++
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2009, 11:04
Готовые ответы и решения:

Пишем свой интерпретатор языка BASIC
Добрый день. Я смотрю, тут на форуме была тема коллективного написания интерпретатора BASIC на...

Пишем свой strlen
Всем привет, вырвал часть задание из общего задание по написанию своего string. На данном этапе...

Пишем свой чекер
Я хочу написать свой чекер, но не знаю с чего начать? Кто знает основные принцип работы чекеров...

пишем свой троян с нуля
Всем привет)))соглашусь, что изобретаю велосипед, но хочется сделать все своими ручками не прибегая...

464
02.07.2009, 11:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2009, 11:04
Помогаю со студенческими работами здесь

Пишем свой класс, спецификатор доступа protected
Всем привет! Из книги Р. Лафоре относительно спецификатора доступа protected: Далее пишется...

Интерпретатор небольшого языка программирования на С++
Здравствуйте, уважаемые форумчане! Я тут где-то год назад прочитал тему Evg и #pragma о создании...

Не удается откомпилировать интерпретатор М-языка
Задача: взять интерпретатор М-языка на сайте...

Интерпретатор музыки стандарта BASIC PLAY на С++
У кого нибудь есть функция или класс, который сможет воспроизводить в С++ напрямую музыкальные...

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

Интерпретатор/компилятор ассемблер-подобного языка
Привет! Чую, что изобрёл велисипед, даже скорее велопарк, но всё же, поделюсь: Некоторое время...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru