При написании собственного lex/yacc мой код, скомпилированный с помощью g++, выдал странную ошибку.Linux

Ответить Пред. темаСлед. тема
Anonymous
 При написании собственного lex/yacc мой код, скомпилированный с помощью g++, выдал странную ошибку.

Сообщение Anonymous »

Не могли бы вы помочь мне определить, где проблема может быть в моем коде, или, возможно, проблема связана с самим компилятором?»
Я писал свой собственный lex/yacc с помощью cpp. Есть несколько кодов для создание двоичного дерева регулярных выражений. Такой код вызвал странную ошибку Nodes[parent].right = add(R, output, s); Он копирует дерево R как правое поддерево Nodes[parent]. ]. Все узлы в дереве хранились в массиве Nodes в куче. Таким образом, Nodes[parent].right и возвращаемое значение add(R, output, s) оба имеют тип size_t. Начальное значение Nodes[parent].right — (size_t)-1. Я проверил возвращаемое значение непосредственно перед добавлением. (R, output, s) вернулось, это было правильное значение 8. После его возврата я напечатал значение Nodes[parent].right, оно все равно было неправильным начальным значением (size_t )-1. Казалось, что при возврате произошел сбой. Вместо этого я использую size_t temp; temp =append(R, output, s); ошибка исчезла.
Оба стиля кода кажутся эквивалентными, поэтому первый вызвал ошибку, а второй был прав.
Ниже приводится определение шаблона двоичного дерева: я должен извиниться за то, что классы шаблонов buffer и list были определены мной, они не являются частью std.< /p>

Код: Выделить всё

template  class Bitree
{
public:
struct node
{
size_t left;
size_t right;
T content;
};
Bitree();
~Bitree();
void clear(void);
void SetHead(size_t head);
size_t NewNodeOffset(void);
node* NewNode(void);
node* Node(size_t site)const;
node* LeftChild(const node* now)const;
node* RightChild(const node* now)const;
const node& operator[](size_t target) const;
node& operator[](size_t target);
void postorderTraversal(buffer& output, list& s) const;
void postorderTraversal(buffer& output) const;
void inorderTraversal(buffer& output, list& s) const;
void inorderTraversal(buffer& output) const;
bool IfLeaf(size_t site)const;
void Demo(FILE* fp)const;

void removal(size_t site);
void removal(size_t site, buffer& outpaput, list& s);
size_t append(const Bitree& source, buffer& output, list& s);

void append(const Bitree& left, size_t parent);
void append(const Bitree& left, const Bitree& right, size_t parent);

size_t append_t(const Bitree& source, buffer& output, list& s, bool key);//for testing of this bug
void append_t(const Bitree& left, const Bitree& right, size_t parent, bool key);
//for testing of this bug
size_t Head;// root
private:

size_t Size;// capacity of node* Nodes
size_t Count;// amount of nodes in this tree
size_t FirstEmpty;
node* Nodes;
};
И ниже приводится определение (все результаты, напечатанные std::cout, верны.) void add(const Bitree& left, const Bitree& right , size_t родительский);

Код: Выделить всё

void append(const Bitree& left, const Bitree& right, size_t parent);
{
size_t now, new_node, temp;
s.refresh();
output.refresh();
new_node = SizeMax;
source.postorderTraversal(output, s);
s.refresh();
s.renew(source.Size);
while (output.dequeue(now))
{
new_node = NewNodeOffset();
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78719391/when-writing-my-own-lex-yacc-my-code-that-was-cpmpiled-by-g-producted-a-weird[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обнаружил странную проблему при написании b+деревьев с использованием Python.
    Гость » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Гость
  • Что означает «конфигурация» и где она определяется при создании бота Lex с использованием Java SDK для AWS
    Anonymous » » в форуме Javascript
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Как интегрировать чат-бот AWS Lex на свой веб-сайт? [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Lex S-выражения C++
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • PyAutoGUI выдает странную ошибку при попытке использовать переменные в .moveTo(#,#)
    Anonymous » » в форуме Python
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»