Получение 2 входных данных из командной строки в Bison / Flex - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть простой синтаксический анализатор языков, использующий Bison / Flex, и я хочу читать два отдельных числа из командной строки, которые выглядят так: ./compile

У меня есть чтение во входных данных из main и сохранение их в массив. Насколько я могу судить, эта часть работает нормально, у меня возникают проблемы, когда я пытаюсь сохранить входные данные (и имя входных данных), и я пытаюсь поместить их в несортированную карту, но я могу только выяснить, как сделать один ввод, но потом не может попасть на другой ввод.

Я попытался сохранить входные данные в вектор, а затем удалить верхний элемент для сохранения на карту, но у компилятора возникла проблема с вектором, поскольку он говорит, что не может преобразовать вектор в двойное число (я не могу понять, почему попытка удалить двойник из вектора вернула бы вектор)

Вероятно, это потому, что я еще не слишком знаком с Bison / Flex, и я мало что делал с C ++ уже несколько лет, поэтому извините, если решение очевидно. Я искал ответ около дня, но ничего не могу найти. Пожалуйста, дайте мне знать, если вы можете мне помочь.

Это главное: enter image description here

и для этого нужно сохранить каждый ввод из командной строки с типом «параметр:» enter image description here

Я пробовал несколько способов (список, стек, массив), но пока единственным способом, который не вызывает ошибку, является массив, подобный: параметр: INDENTIFIER ':' type {symbols.insert ( $ 1, params [0]);}; Но очевидно, что это даст только один из входов (так как он имеет доступ только к первой части массива), что я могу сделать, чтобы добавить более одного входа? Это класс для символов, где есть функция insert (). Необходимо сохранить каждый идентификатор и ввести данные на карту. Спасибо вам за помощь. enter image description here

1 Ответ

0 голосов
/ 30 апреля 2019

Ну, я чувствую себя глупо. Я просто предполагал такую ​​функцию, как list.pop_front (); вернул бы значение, хранящееся там. Я посмотрел на ссылку и обнаружил, что был неправ. Так что я получил его, используя список. Мне очень жаль тратить время каждого. Я добавил это, чтобы исправить это:

list<double> params;
parameter:
    IDENTIFIER ':' type { if(!params.empty) {
                              input = params.front();
                              params.pop_front();
                          }
                          symbols.insert($1, input); } ;

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

Например, инициализировать params как:

double *params;

parameter:
    IDENTIFIER ':' type {symbols.insert($1, params[??]);} ;
...