Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Anerius
0 / 0 / 0
Регистрация: 08.12.2013
Сообщений: 5
#1

Разработка интерпретатора языка - C++

16.12.2013, 23:03. Просмотров 566. Ответов 1
Метки нет (Все метки)

Добрый день! При разработке интерпретатора возникла след проблема: Qt Creator не желает конвертировать чаровские константы в тип token_ireps. Вот код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "analizator.h"
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cctype>
#define  IF "if"
#define  ELSE "else"
#define  FOR "for"
#define  DO "do"
#define  WHILE "while"
#define  CHAR "char"
#define  INT "int"
#define  RETURN "return"
#define  SWITCH "switch"
#define  BREAK "break"
#define  CASE "case"
#define  COUT "cout"
#define  CIN "cin"
#define  END ""
#define call_getchar  "getchar"
#define call_putchar  "putchar"
#define call_abs       "abs"
#define NUL ""
 
 
using namespace std;
 
 
struct commands{
    char command [20];
analizator::token_ireps tok;
}
 com_table[]{
    "if", IF,
    "else", ELSE,
    "for", FOR,
    "do", DO,
    "while", WHILE,
    "char", CHAR,
    "int", INT,
    "return", RETURN
    "switch", SWITCH,
    "break", BREAK,
    "case", CASE,
    "cout", COUT,
    "cin", CIN,
    " ", END
};
В с++ я не спец. Пишу по книге, потому не могу определить, что не так. Синтаксис выдержал в соответствии с источником, только добавил несколько своих ключевых слов... Вот заголовочный файл, где определен token_ireps :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef ANALIZATOR_H
#define ANALIZATOR_H
 
class analizator
{
public:
    const int MAX_T_LEN = 128;
    const int MAX_ID_LEN =31;
    const int PROG_SIZE = 10000;
    const int NUM_PARAMS = 31;
 
    enum tok_types{UNDEFTT, DELIMITER, IDENTIFIER, NUMBER, KEYWORD, TEMP, STRING, BLOCK};
    enum token_ireps {UNDEFTOK, ARG, CHAR, INT, SWITCH, CASE, IF, ELSE, FOR, DO, WHILE, BREAK, RETURN, COUT, CIN,END}; // <---
    enum double_ops {LT =1, LE, GT,GE, EQ, NE, LS, RS, INC, DEC};
    enum error_msg {SYNTAX, NO_EXP, NOT_VAR, DUP_VAR, DUP_FUNC, SEMI_EXPECTED, UNBAL_BRACES, FUNC_UNDEF, TYPE_EXPECTED, RET_NOCALL, PAREN_EXPECTED, WHILE_EXPECTED, QUOTE_EXPECTED, DIV_BY_ZERO, BRACE_EXPECTED, COLON_EXPECTED};
 
    char *prog;
    char *p_buf;
    char *token;
    tok_types token_type;
    token_ireps tok;
    int ret_value;
    bool breakfound;
 
    class InterpExc {
        error_msg err;
    public:
        InterpExc(error_msg e){err = e;}
        error_msg get_err() {return err;}
    };
    //Интерпретатор
    void prescan ();
    void decl_global();
    void call();
    void putback();
    void decl_local();
    void exec_if();
    void find_eob();
    void exec_for ();
    void exec_switch();
    void get_params();
    void get_args ();
    void exec_while();
    void exec_do();
    void exec_cout();
    void exec_cin();
    void assign_var(char *var_name, int value);
    bool load_program(char *p, char *fname);
    int find_var(char *s);
    void interp();
    void func_ret();
    char *find_func (char *name);
    bool is_var(char *s);
    token_ireps find_var_type(char *s);
    int main (int argc, char *argv []);
 
    // Анализатор
    void eval_exp(int &value);
    void eval_exp0(int &value);
    void eval_exp1(int &value);
    void eval_exp2(int &value);
    void eval_exp3(int &value);
    void eval_exp4(int &value);
    void eval_exp5(int &value);
    void atom(int &value);
    void sntx_err(error_msg error);
    bool isdelim(char c);
    token_ireps look_up(char *s);
    tok_types get_token();
    int internal_func (char *s);
// Библиотека
    int call_getchar();
    int call_putchar();
    int call_abs();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 23:03     Разработка интерпретатора языка
Посмотрите здесь:

Разработка командного интерпретатора - C++
Добрый день, ребят помогите пожалуйста написать командный интерпретатор на с++

Выделение в исходном коде программы ключевых слов языка и операторов языка по словарю - C++
Разбор исходного текста на языке программирования. Выделение в исходном коде программы ключевых слов языка и операторов языка по словарю....

Код командного интерпретатора на С++ - C++
Добрый день всем! Нужен командный интерпретатор под любую ОС только написанная на С++. может и кого-то уже есть готовый и если не жалко то ...

Чем отличается компилятор от интерпретатора? - C++
чем отличается компилятор от интерпретатора?

Нужен рабочий код интерпретатора - C++
Ребят,если у кого есть,киньте код интерпретатора плз..очень надо.

Какая версия языка у языка С++? - C++
Здравствуйте! Собираюсь писать егэ по информатике уже меньше, чем через две недели. Собираюсь писать код на С++. В заданиях пишется,...

Здраствуйте помогите пожалуста написать прогу "Разработать программу эмуляции работы командного интерпретатора ОС" - C++
mv – перемещение файла pd – текущее местоположение cp – копирование файла rm – удаление файла Три команды должны быть написаны...

Исключения языка C++ - C++
Задание в книге по программированию выполнил отчасти (всё что нужно уже изменил и оригинал не нужен). Не знаю как сделать так, чтобы catch...

Стандарт языка С++ - C++
Можно ли данный документ считать стандартом языка С++?

Кросплатформенность языка - C++
Допустим у меня есть проект .cpp и я компилирую его из под винды и получаю .exe файл, а вот если я скомпилирую свой проект на линуксе, то я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
16.12.2013, 23:08     Разработка интерпретатора языка #2
что за книга?

Добавлено через 47 секунд
если используешь енумы, никакие дефайны тебе не нужны.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru