计数但小错误
count but small bug
我正在做单独的一个字符串,当看到分隔符时我确实添加了一种情况,它对最后一个分隔符工作正常。例如我的字符串是 "symbol control_line : std_logic:= '0' ; --example comment"
当看到第一个定界符时输出是正确的:但是当它看第二个时:=它失败了。我不知道为什么会这样?代码对于两个定界符都应该没问题,为什么只找出第一个,但第二个却失败了?
这个prepareNextToken 函数是计算出第二个Token 的tokenLength 是多少。我可以使用这个函数来获取当前令牌。
void Tokenizer::prepareNextToken()
{
string real=*str;
if(offset==real.size())
complete=true;
else
{
if(ifcomment==false)
{
size_t length=0;
size_t index=offset;
size_t smallest=find_first_delimilater(vhdl_char);
while(index<real.size() )
{
length++;
if(index==smallest && real[index+1]==' ')
{
cout<<real[smallest]<<" ";
break;
}
else if(index==smallest && real[index+1]!=' ')
{
length++;
break;
}
else if(index==real.find(' ',offset))
{
break;
}
else if(index==real.find("--",offset))
{
length++;
break;
}
index++;
}
tokenLength=length;
}
else if(ifcomment==true)
tokenLength=real.size()-offset;
}
//cout<<tokenLength<<endl;
}
我的输出是
signal --which is correct
control_line --the current offset
: --which is right because I reach the first case in my
--prepareNextToken and ":" is first delimilator
std_logic:= --that is the wrong output because it should be std_logic
-- and in a separate line comes out ";=" which is another
--delimilator, and is a multiple delimilator no empty case
-- so that means I go to the second cases
-- -- which is also right which go to fourth case
sample comment -- which is right
我的问题是为什么当“:”出现在它自己的行中时,为什么“:=”出现时它以 std_logic 结尾?
substr
的第二个参数是要提取的字符数而不是结束位置(参见http://www.cplusplus.com/reference/string/string/substr/)。
所以你的提取线应该是:
s=name.substr(offset,tokenLength);
我正在做单独的一个字符串,当看到分隔符时我确实添加了一种情况,它对最后一个分隔符工作正常。例如我的字符串是 "symbol control_line : std_logic:= '0' ; --example comment"
当看到第一个定界符时输出是正确的:但是当它看第二个时:=它失败了。我不知道为什么会这样?代码对于两个定界符都应该没问题,为什么只找出第一个,但第二个却失败了?
这个prepareNextToken 函数是计算出第二个Token 的tokenLength 是多少。我可以使用这个函数来获取当前令牌。
void Tokenizer::prepareNextToken()
{
string real=*str;
if(offset==real.size())
complete=true;
else
{
if(ifcomment==false)
{
size_t length=0;
size_t index=offset;
size_t smallest=find_first_delimilater(vhdl_char);
while(index<real.size() )
{
length++;
if(index==smallest && real[index+1]==' ')
{
cout<<real[smallest]<<" ";
break;
}
else if(index==smallest && real[index+1]!=' ')
{
length++;
break;
}
else if(index==real.find(' ',offset))
{
break;
}
else if(index==real.find("--",offset))
{
length++;
break;
}
index++;
}
tokenLength=length;
}
else if(ifcomment==true)
tokenLength=real.size()-offset;
}
//cout<<tokenLength<<endl;
}
我的输出是
signal --which is correct
control_line --the current offset
: --which is right because I reach the first case in my
--prepareNextToken and ":" is first delimilator
std_logic:= --that is the wrong output because it should be std_logic
-- and in a separate line comes out ";=" which is another
--delimilator, and is a multiple delimilator no empty case
-- so that means I go to the second cases
-- -- which is also right which go to fourth case
sample comment -- which is right
我的问题是为什么当“:”出现在它自己的行中时,为什么“:=”出现时它以 std_logic 结尾?
substr
的第二个参数是要提取的字符数而不是结束位置(参见http://www.cplusplus.com/reference/string/string/substr/)。
所以你的提取线应该是:
s=name.substr(offset,tokenLength);