Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Меню и список http://www.cyberforum.ru/cpp-beginners/thread41194.html
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились:...
C++ Здравствуйте! Не могу поместить class в один файл с программой. file.hpp #include "Cat.hpp" // здесь классы "2)" Cat::Cat(int initialAge) { itsAge = initialAge; } Cat::~Cat() { http://www.cyberforum.ru/cpp-beginners/thread41186.html
Массивы строк C++
Привет всем! Задан массив строк. Как узнать который символ встечаетса найбольшое количество раз в етом массиве?
C++ вывод на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер
Please, help me!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо...
C++ Округление дробного числа до целого в большую сторону. http://www.cyberforum.ru/cpp-beginners/thread41139.html
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) ...
C++ Код из Delphi в C++ Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; ... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18242 / 6367 / 435
Регистрация: 30.03.2009
Сообщений: 17,613
Записей в блоге: 28
18.09.2009, 17:45
Мой интерпретатор метки пока не поддерживает, но они неявно появляются в if'е. Грубо говоря, когда ты в структурном виде пишешь программу

PureBasic
1
2
3
4
5
6
7
IF A==B THEN
  A=1
  B=2
ELSE
  A=100
  B=200
ENDIF
то на представлении в виде цепочки получается аналог вот такой штуки:

C
1
2
3
4
5
6
7
8
9
if (a==b) then goto L1; else goto L2; // операция условного перехода, параметры - условное выражение и две метки
L1: // операция метка
a=1;
b=2;
goto L3; // операция безусловного перехода
L2:
a=100;
b=200;
L3:
Т.е. при интерпретации такого представления всё делается в "единой плоскости" (т.е. стек вызова при интерпретации кажой операции имеет одну и ту же глубину). При этом ты имеешь один-единственный список операций. И моя версия интерпретатора в процессеработы печатает именно такое промежуточное представление (и вообще можно визуально понять, что в нём находится)

Т.е. если для моей версии написать исходник

PureBasic
1
2
3
4
5
6
7
8
LET A = 5
IF A < 6 THEN
  LET A = 1
  LET B = 2
ELSE
  LET A = 100
  LET B = 200
END_IF
то напечатается вот такое промежуточное представление

Код
s1. LET        A = 5
s5. CBRANCH    (A < 6) -> t=s2(#then), f=s3(#else)   <-- переход по true на операцию s2, по false на s3

s2. LABEL      #then        <--- аналог метки L1
s6. LET        A = 1
s7. LET        B = 2
s8. BRANCH     -> s4(#finish)  <---- безусловный переход на операцию s4

s3. LABEL      #else        <--- аналог метки L2
s9. LET        A = 100
s10. LET       B = 200

s4. LABEL      #finish        <--- аналог метки L3
А для твоего исходника

PureBasic
1
2
3
4
5
6
7
8
9
10
LET A = 8
IF A THEN
 PRINT A
 1:
  PRINT "AAAA"
ELSE
 PRINT "DFDFD"
 GOTO 1
 PRINT "HHHH"
END IF
построилось бы представление, аналогом которого является код

C
1
2
3
4
5
6
7
8
9
10
11
if (a) then goto L1; else goto L3;
L1: // метка начала альтернативы then
print a;
L2: // языковая метка 1:
print "AAAA";
goto L4;
L3: // метка начала альтернативы else
printf "DFDFD";
goto L2;
print "HHHH";
L4:
тут я тебе пояснил, как сделано у меня, чтобы было понятно. Мне такое решение показалось наиболее простым, но опять-таки - я НЕ навязываю его тебе. Делай так, как тебе более понятно. Но вопросы как-то более подробно задавай. Твой интерпретатор уже по коду довольно большой и я не могу уже в деталях понимать его работу, не копаясь глубоко в исходнике. А потому нераскрытый вопрос понимаю с трудом и могу понять неправильно

Добавлено через 6 минут
Цитата Сообщение от #pragma Посмотреть сообщение
И в том то и дело,что я под виндами вообще не сижу .. вот и не знаю,как и когда \r туда мог попасть
Теоретически я мог под виндами что-то подправить в своём исходнике и выложить на форум, а ты уже скопировал оттуда

Цитата Сообщение от #pragma Посмотреть сообщение
Я нашел как поправить.. но вопрос про всякие левые символы в силе.
Сложно сказать. Я просто на все неизвестные символы выругиваюсь и всё. У меня есть вызов isspace, который проверяет на всякие пробельные символы, туда входит табуляция и возможно ещё что-то, что меня мало заботит, т.к. интефейс для того и писали, чтобы не разбираться в этом (\r туда возможно тоже попал). Файл я открываю как "rb", а потому с энтером он схлопнуться не должен
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru