小编bor*_*der的帖子

flex/bison将数字解释为浮点数

我正在尝试一个可以进行浮点运算的flex/bison计算器.我的flex代码看起来像这样

%{
#include "calc.tab.h"
#include <stdlib.h>

void yyerror(char *s);
%}

digit [0-9]
integer {digit}+
real ({digit}+[.]{digit}*)|({digit}*[.]{digit}+)
exp ({integer}|{real})[eE]-?{integer}

%%

({integer}|{real}|{exp}) { yylval = atof(yytext); return NUMBER; }
[-+*/\n]                 { return *yytext; }
[ \t\v\f\r]              { }
.                        { yyerror("Unknown Character"); }

%%

int yywrap(void)
{
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

我的野牛代码看起来像这样

%{
#include <stdio.h>

typedef double YYSTYPE;
#define YYSTYPE_IS_DECLARED

void yyerror(char *s);
extern char *yytext;
extern int yylineno;
%} 

%token NUMBER

%left '+' '-'
%left '*' '/'

%%

program: program expr '\n' …
Run Code Online (Sandbox Code Playgroud)

yacc lex bison flex-lexer

4
推荐指数
1
解决办法
5717
查看次数

在C++中重新分配向量

可能重复:
删除包含C++ STL中的向量的动态分配对象

我有这样的结构

struct foo {
  vector<int> myvector;
};
Run Code Online (Sandbox Code Playgroud)

现在,我创建一个指向foo的指针,调整大小并将一些元素插入到向量中.

foo *myfoo = new foo;
myfoo->myvector.resize(100);
myfoo->myvector.push_back(0);
myfoo->myvector.push_back(1);
... // and so on
Run Code Online (Sandbox Code Playgroud)

现在,在myfoo超出范围之前,我将不得不释放分配给它的内存

delete myfoo;
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是否会照顾我的myvector?我有这个特殊的查询,因为现在myvector被调整大小,STL库可能会在堆中分配容器.所以,当我释放myfoo时,我不希望分配给myvector的内存泄漏.

c++ stl vector

2
推荐指数
1
解决办法
563
查看次数

标签 统计

bison ×1

c++ ×1

flex-lexer ×1

lex ×1

stl ×1

vector ×1

yacc ×1