我有一個ANTLR規則會返回一個向量:C++,ANTLR和載體
main returns [std::vector<int> v]
:
('ERROR' t3=INT{v.push_back(atoi((const char*)$t3.text->chars));}
'='t4=INT{v.push_back(atoi((const char*)$t4.text->chars));}
);
然後我把它從C++,並得到矢量數據。
但是,我的問題是,ANTLR3自動將向量v初始化爲NULL,這是不允許的,並給我一個錯誤。
如果我生成antlr的C++輸出並嘗試使用我的項目進行編譯,它會給出錯誤。
我手動去的那ANTLR輸出和刪除設置爲NULL選項,再編譯,一切工作的parsedfile。
我都不可能看到解決這個問題:
1)初始化從ANTLR矢量自己(不知道如何從初始化我的矢量(不知道是否INITIALIZE向量)
2)防止ANTLR這是可以做到)
3)始終手動去更改初始化(不是好的做法)
4)找到另一種方式來回報向量,試圖返回一個指針數組,我得到以下錯誤:
error: conversion from ‘std::vector<int, std::allocator<int> >*’ to non-scalar type ‘std::vector<int, std::allocator<int> >’ requested
任何幫助?
如果我正確讀取規則,它看起來像是聲明一個向量,然後向向量添加數據。是否有任何理由不能使用矢量模板的填充構造函數來添加所需的數據?這將消除必須首先實例化v的問題,然後直接調用它。 http://www.cplusplus.com/reference/vector/vector/vector/ – cowboydan
可以請您解釋更多... –
我認爲如果您使用「@init」將t2和t3的數字表示添加到v,你應該很好。在ANTLR文檔中查看「@init」。 – cowboydan