所以,我正在使用boost 1.47.0并且我一直在尝试组合一个词法分析器.
我的目标是为我的词法分析器的一些标记添加一个包含语义的动作
spirit::lex::_pass = spirit::lex::pass_flags::pass_ignore.但是,我无法编译任何语义操作.我在下面添加了一个(或多或少)最小的例子.我正在编译OS X 10.7.1上的clang.
clang++ -DBOOST_SPIRIT_DEBUG -DBOOST_SPIRIT_LEXERTL_DEBUG -DBOOST_SPIRIT_USE_PHOENIX_V3 -c input.cc
Run Code Online (Sandbox Code Playgroud)
#include <boost/phoenix.hpp>
#include <boost/spirit/home/lex.hpp>
#include <boost/spirit/home/lex/lexer/lexertl/lexer.hpp>
namespace phoenix = boost::phoenix;
namespace spirit = boost::spirit;
struct vhdl_lexer : spirit::lex::lexer< spirit::lex::lexertl::lexer<> > {
vhdl_lexer() {
num = "[0-9]";
any = ".";
this->self
= num
| any
;
}
spirit::lex::token_def<> num, any;
};
Run Code Online (Sandbox Code Playgroud)
#include <boost/phoenix.hpp>
#include <boost/spirit/home/lex.hpp>
#include <boost/spirit/home/lex/lexer/lexertl/lexer.hpp>
namespace phoenix = boost::phoenix;
namespace spirit = boost::spirit;
struct vhdl_lexer : spirit::lex::lexer< spirit::lex::lexertl::lexer<> > {
vhdl_lexer() …Run Code Online (Sandbox Code Playgroud) 我想在RAII的帮助下实现一个课程.资源应该在构造函数中获取,但是acquistition可能会失败.我将在下面使用FILE给出一个示例:
class file {
public:
file(const char* filename) {
file_ = fopen(filename, "w+");
if(!file_) {
// Okay
}
else {
// ERROR
}
}
~file() {
if (fclose(file_)) {
// ERROR
}
}
void write(const char* str) {
if (EOF == fputs(str, file_)) {
throw runtime_error("file write failure");
}
}
private:
FILE* file_;
};
Run Code Online (Sandbox Code Playgroud)
那么,如果fopen返回NULL,那么处理错误的最佳方法是什么?因为它是构造函数,所以我也无法返回NULL.
我希望有人能给我一个如何处理这些错误的提示!
谢谢您最好的问候,
闪光
下面是编译用"%20"替换空格的编程,但是当我运行它时,输出窗口显示空白并显示消息"arrays5.exe发生了一个概率"
#include <iostream>
#include<cstring>
using namespace std;
void method(char str[], int len) //replaces spaces with "%20"
{
int spaces, newlen,i;
for (i=0;i<len;i++)
if(str[i]==' ') spaces++;
newlen=len+spaces*2;
str[newlen]=0;
for (i=len-1;i>=0;i--)
{
if(str[i]==' ')
{
str[newlen-1]='0';
str[newlen-2]='2';
str[newlen-3]='%';
newlen=newlen-3;
}
else
{
str[newlen-1]=str[i];
newlen=newlen-1;
}
}
}
int main()
{
char str[20]="sa h ";
method(str,5);
cout <<str<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请帮我找错.谢谢
我正在尝试使用openmp学习多线程编程.
首先,我测试了一个带有大量数组访问操作的嵌套循环,然后将其并行化.我附上下面的代码.基本上,我在内部循环中有这个相当大的数组tmp,如果我让它共享以便每个线程都可以访问和更改它,我的代码实际上会随着线程数量的增加而减慢.我写了它,以便每个线程将完全相同的值写入数组tmp.当我将tmp设为私有时,我的速度与线程数成正比.没有.在这两种情况下,我认为操作完全相同.为什么在共享tmp时速度会变慢?是因为不同的线程试图同时访问同一个地址吗?
int main(){
int k,m,n,dummy_cntr=5000,nthread=10,id;
long num=10000000;
double x[num],tmp[dummy_cntr];
double tm,fact;
clock_t st,fn;
st=clock();
omp_set_num_threads(nthread);
#pragma omp parallel private(tmp)
{
id = omp_get_thread_num();
printf("Thread no. %d \n",id);
#pragma omp for
for (k=0; k<num; k++){
x[k]=k+1;
for (m=0; m<dummy_cntr; m++){
tmp[m] = m;
}
}
}
fn=clock();
tm=(fn-st)/CLOCKS_PER_SEC;
}
Run Code Online (Sandbox Code Playgroud)
PS:我知道在这里使用clock()并没有真正给出正确的时间.我必须将它除以否.在这种情况下,线程获得"time ./a.out"给出的类似输出.
有没有办法可以在C++中获取类的所有对象.就像在Python中一样,我们可以做到
class_name.objects.all()
Run Code Online (Sandbox Code Playgroud)
得到一个类的所有对象.如果它存在,它在C++中的模拟是什么?
我在代码库中找到了以下代码.我的同事认为这没关系,但看起来像UB一样可疑.是不是UB?
class A {
//some stuff
};
class B : public A {
int a;
int b;
int c;
}
void foo( std::vector<A>& a ) {
std::vector<B> b;
for(size_t i = 0 ; i < a.size(); ++i ){
b.push_back( *(B*)(&a[i]) );
}
//remove some elements from b
for(size_t i = 0 ; i < b.size(); ++i ){
a.push_back( *(A*)(&b[i]) );
}
}
Run Code Online (Sandbox Code Playgroud) 我的问题是关于以下代码:
library ieee;
use ieee.std_logic_1164.all;
entity exam is port (
I,CLK,RESET : in std_logic;
Q : out std_logic
);
end entity;
architecture exam_arc of exam is
signal temp_sig : std_logic;
begin
process (CLK,RESET)
begin
if RESET = '1' then
temp_sig <='0';
elsif CLK'event and CLK='1' then
temp_sig <= I;
end if;
Q <= temp_sig;
end process;
end exam_arc;
Run Code Online (Sandbox Code Playgroud)
似乎这段代码模拟了一个D触发器,它在时钟的上升沿工作,但是这个问题的答案是[这个问题来自于考试]这个问题声称这个D触发器在时钟的下降沿工作.
这个VHDL代码模拟什么样的触发器?
我有一个非常基本的查询.对于以下代码:
int i = -1;
unsigned int j = (unsigned int) i;
printf("%d",j); // I get 65535 the int limit in turbo C 16 bit compiler
Run Code Online (Sandbox Code Playgroud)
它不应该只是放下负号或者它是否包围了极限?
我正在尝试运行一个名为 BLASTP 的生物程序,它接收两个字符串(代码中的 fasta_GWIDD 和 fasta_UNIPROT)并比较它们。我遇到的问题是在代码中使用了 echo/system。谁能建议我错过了什么?
for(i=0;i<index1;i++)
{
sprintf(fasta_GWIDD,">%s\\n%s\n",fasta_name1[i],fasta_seq1[i]);
setenv("GwiddVar", fasta_GWIDD, 1) ;
sprintf(fasta_UNIPROT,">%s\\n%s\n",fasta_name2[i],fasta_seq2[i]);
setenv("UniprotVar", fasta_UNIPROT, 1) ;
system("blastp -query <(echo -e $GwiddVar) -subject<(echo -e $UniprotVar)");
}
Run Code Online (Sandbox Code Playgroud)
错误是:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `blastp -query <(echo -e $GwiddVar) -subject<(echo -e $UniprotVar)'
Run Code Online (Sandbox Code Playgroud) 我一直在尝试学习如何在 VHDL 中使用条件信号分配(我相信哪些是 WHEN ELSE 语句?),并提出了应该是一个简单的代码。但 ModelSim 不让它编译并一直告诉我我有一个非法的并发语句。在哪里?为什么?我尝试在进程内执行 IF ELSIF ELSE 语句,但仍然遇到完全相同的错误,所以我现在比开始时更困惑......
Library ieee;
Use ieee.std_logic_1164.all;
Entity Q59122 is port (
A, B : IN STD_LOGIC;
Y : OUT STD_LOGIC
);
End Entity Q59122;
ARCHITECTURE csa OF Q59122 IS
BEGIN
Y <= '0' WHEN A = '0'
ELSE Y <= '0' WHEN B = '0'
ELSE Y <= '1';
END csa;
Run Code Online (Sandbox Code Playgroud)
基本上我正在尝试使用条件信号分配来模拟与门。我知道您可以在 VHDL 中使用“and”命令,但这会达不到目的。我在这里先向您的帮助表示感谢。