вызов функции из класса в парсере бизонов - PullRequest
0 голосов
/ 02 марта 2020

У меня есть функция, изначально размещенная в (trynow.hpp). я вызвал функцию в файле парсера, и она работает нормально. Теперь я хотел бы добавить функцию в класс внутри "trynow.hpp", но когда я добавил функцию в класс, вызов не работает. так как я могу сначала определить класс в файле парсера? вот мой файл парсера (parser.ypp):

%{
#include <iostream>
#include <string>
#include <cstdlib>
#include "trynow.hpp"

using namespace std;

extern int yylex();

void yyerror(const char *s);

%}


//-- SYMBOL SEMANTIC VALUES -----------------------------

%union {
       int ival;
       char* sval;
       char symbol;
    }
%token <ival> NUM
%token <sval> WORDS
%token <symbol> COMMA


%%
  //-- rules -----------------------------
  program :  /* empty */
  |  program  rules
  ;
  rules:
   WORDS COMMA WORDS COMMA NUM  {show_inputs($1 , $3 , $5);};
   ;

  %%
  int main(int argc, const char * argv[]) {

        string input;
        cout<<"enter the bdd name followed by the word and number of ocuurances, sperated by comma " 
       <<endl;
        yyparse();

       return 0;


     }
    void yyerror(const char *s) {
    cout << "wrong entry! " << s << endl;
    // might as well halt now:
     }

, а вот мой файл (trynow.hpp):

#include <stdio.h>
#include <string>
#include <cstddef>
#include <istream>
#include "parser.tab.hpp"
#include<iostream>
using namespace std;

 class finalnow{
    public: void show_inputs(  string word1, string word2,int number ){
        std::cout << "you have entered the followings : " << word1 << "," << word2 << " and " << 
      number 
    <<std::endl;}
   };

Я видел этот вопрос, но функция не была внутри класс: вызов c функции в зубре Я также слышал о:% parse-param {finalnow & self} и затем попытался сделать self.show_inputs ($ 1, $ 3, $ 5); но это не удалось.

...