Важная информация
Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 48

Тема: Язык для начинающих Бегин

  1. #1 Язык для начинающих Бегин 
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Решил сделать новый язык программирования Бегин. Пока всего две команды: write [текст без кавычек и пробелов], end. Сначала думал сделать его русским (для тех кто даже английские буквы не знает), но не получилась, русифицирую позже.
    Код :
    #include <stdio.h>
     
    main()
    {
    	int i=1, stop=0;
    	char command[10];
    	FILE *fin;
    	fin = fopen("programm.b", "r");
    	printf("Запуск программы....[OK]\n");
    	while (stop!=1 && fscanf(fin, "%s", command)>0)
    	{
    		if (command[0]=='e' && command[1]=='n' && command[2]=='d')
    		{
    			stop = 1;
    		}
    		if (command[0]=='w' && command[1]=='r' && command[2]=='i' && command[3]=='t' && command[4]=='e')
    		{
    			fscanf(fin, "%s", command);
    			printf ("%s", command);
    		}
    		i++;
    	}
    	printf("\nЗавершение программы....[OK]\n");
    	fclose (fin);
    }
    Текст программы находится в файле programm.b
    Последний раз редактировалось pingvin; 03.05.2011 в 12:05.
    Ответить с цитированием  
     

  2. #2  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,537
    Сказал(а) спасибо
    127
    Поблагодарили 433 раз(а) в 294 сообщениях
    Записей в блоге
    6
    Ну чтож, удачи в начинаниях. Рекомендую почитать описание эзотерических языков, там есть достаточно хорошие тьюринг-полные языки с минимумом команд. Если знаешь инглиш, то лучше сразу esolangs.org, там их тьма-тьмущая. Для начинаюдих языкосоздователей это достаточно хороший материал
    Ответить с цитированием  
     

  3. #3  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Программа на Бегине будет выглядеть так:
    Код :
    rogram.name: "название программы"
    библиотеки ещё рано
    variables:
    int: , , ;
    double: , , ;
    char: , , ;
    program:
    .
    .
    .
    end.
    При этом можно операторы любые писать в любых местах. Получается смесь бэйсика, паскаля и С
    Закончил работу над оператором write, теперь можно писать размером сколько угодно текст, но без кавычек внутри кавычек:
    Код :
    write "Привет мир!"
    Код :
    #include <stdio.h>
     
    main()
    {
    	int i=1, stop=0;
    	char command[20], text[1000], c=0;
    	FILE *fin;
    	fin = fopen("programm.b", "r");
    	printf("Запуск программы....[OK]\n");
    	while (stop!=1 && fscanf(fin, "%s", command)>0)
    	{
    		if (command[0]=='e' && command[1]=='n' && command[2]=='d' && command[3]=='.')
    		{
    			stop = 1;
    		}
    		if (command[0]=='w' && command[1]=='r' && command[2]=='i' && command[3]=='t' && command[4]=='e')
    		{
    			fscanf(fin, "%c", &c);
    			fscanf(fin, "%c", &c);
    			fscanf(fin, "%c", &c);
    			printf ("%c", c);
    			while (c!=34)
    			{
    				fscanf(fin, "%c", &c);
    				if (c!=34)
    				{
    					printf ("%c", c);
    				}
    			}
    		}
    		i++;
    	}
    	printf("\nЗавершение программы....[OK]\n");
    	fclose (fin);
    }
    Код совместим с TurboC
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,537
    Сказал(а) спасибо
    127
    Поблагодарили 433 раз(а) в 294 сообщениях
    Записей в блоге
    6
    Написал анализатор выражений для бегина на си (обратная польская), но из-за плохого интернета выложить сейчас не могу
    Ответить с цитированием  
     

  5. #5  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Работаю над объявлением переменных
    Ответить с цитированием  
     

  6. #6  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,537
    Сказал(а) спасибо
    127
    Поблагодарили 433 раз(а) в 294 сообщениях
    Записей в блоге
    6
    Pingvin, вот синтаксический анализатор для обратной польской записи. Вводишь выражение, он выдаёт ответ. Числа разделяются символом |
    Например, введи 2|2+ выведет 4. Введи 100|10/|2+ выведет 12.
    Сначала она кажется достаточно непревычной, но потом привыкаешь. Мне она уже более привычна, чем обычная Но зато, посмотри какой маленький код. Синтаксический анализатор обычной записи (типа 2+2*2/(7+4)) занимат несколько страниц кода (У меня в книге есть листинг).

    Код c:
    #include <stdio.h>
    int main(void)
    {
    int i,stp=1;
    int st[20];
    char vir[20];
    printf("Введите строку\n");
    scanf("%s",vir);
    for(i=1;i<20;i++)st[i]=0;
    for(i=0;i<20;i++){
    if (vir[i]=='1'){st[stp]=st[stp]*10; st[stp]=st[stp]+1;}
    if (vir[i]=='2'){st[stp]=st[stp]*10; st[stp]=st[stp]+2;}
    if (vir[i]=='3'){st[stp]=st[stp]*10; st[stp]=st[stp]+3;}
    if (vir[i]=='4'){st[stp]=st[stp]*10; st[stp]=st[stp]+4;}
    if (vir[i]=='5'){st[stp]=st[stp]*10; st[stp]=st[stp]+5;}
    if (vir[i]=='6'){st[stp]=st[stp]*10; st[stp]=st[stp]+6;}
    if (vir[i]=='7'){st[stp]=st[stp]*10; st[stp]=st[stp]+7;}
    if (vir[i]=='8'){st[stp]=st[stp]*10; st[stp]=st[stp]+8;}
    if (vir[i]=='9'){st[stp]=st[stp]*10; st[stp]=st[stp]+9;}
    if (vir[i]=='0')st[stp]=st[stp]*10;
    if (vir[i]=='|'){stp++; st[stp]=0;}
    if (vir[i]=='+'){st[stp-1]=st[stp-1]+st[stp]; stp--;}
    if (vir[i]=='*'){st[stp-1]=st[stp-1]*st[stp]; stp--;}
    if (vir[i]=='-'){st[stp-1]=st[stp-1]-st[stp]; stp--;}
    if (vir[i]=='/'){st[stp-1]=st[stp-1]/st[stp]; stp--;}
    }
    printf("%d",st[stp]);
     
    scanf("%s",vir);/*Пауза*/
     
    return 0;
    }

    Где написано пауза, напиши команду, которая делет паузу до нажатия клавиши, а то я незнаю и написал команду ввода строки.

    Переменные можно сделать так:
    Два массива. В первом - имена переменных. Во втором - значения.
    При объявлении имя добавляется в первый массив.
    А при нахождении переменной в выражении можно поступить так:

    Код c:
    if ((vir[i]>='A')&&(vir[i]<='Z')){ делаем }

    Где написано делаем, создаём цикл While, который выделяет переменную из выражения (Ищет символ, не являющийся буквой при этом добавляя побуквенно во временную строку).
    После того, как он выделил, надо искать эту переменную в списке переменных. Когда он там её найдёт, по намеру я чейки, в котором сидит эта переменная, найти её значения из второго массива, и подсунуть это значение в выражение.(допустим, значение переменной лежит в temp)
    Код c:
    stp++;
    st[stp]=temp;

    Вот так
    Если что непонятно, спрашивай
    Ответить с цитированием  
     

  7. #7  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Что-бы задержать "пауза" можно написать getch(); (библиотека conio.h)он будет ждать до нажатия клавиши.
    А вот на счёт переменных, каждая переменная будет называться одним символом?
    Последний раз редактировалось pingvin; 09.05.2011 в 14:45.
    Ответить с цитированием  
     

  8. #8  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Kakos nonos, ну куда в язык для начинающих добавлять выражения лишь в виде обратной польской нотации? Она удобна, не спорю, однако будет слишком непривычна для новичков. Это не дело.
    Да, в данном коде все будет именно так - каждая переменная будет иметь в названии только один символ, исходя из чего переменных будет не более 20 по объявлению массива, или 26 пока не закончатся буквы английского алфавита. Что не очень удобно.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  9. #9  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Можно и обычную запись распознать, это не сложно. Скоро реализую
    Можно взять одномерный массив размером 500, каждую переменную разделять знаком !. Таким образом можно реализовать и это. Так-же можно динамически выделить память при помощи malloc. При помощи чего можно сказать пользователю сколько переменных можно завести данного размера
    Последний раз редактировалось pingvin; 09.05.2011 в 09:46.
    Ответить с цитированием  
     

  10. #10  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,537
    Сказал(а) спасибо
    127
    Поблагодарили 433 раз(а) в 294 сообщениях
    Записей в блоге
    6
    Pingvin, как будеш циклы, условия реализовывать?(for, while, if)
    Ответить с цитированием  
     

Страница 1 из 5 123 ... ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Книга: СТЕПЛЕР. Язык программирования.
    от Kakos_nonos в разделе Степлер
    Ответов: 12
    Последнее сообщение: 23.03.2013, 06:43
  2. Рассылка QBASIC для начинающих
    от Konstantin Shcherba в разделе Архив
    Ответов: 0
    Последнее сообщение: 24.11.2010, 19:52
  3. Задачи для начинающих
    от BukTop2009 в разделе QBasic
    Ответов: 1
    Последнее сообщение: 23.11.2010, 00:39
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •