Compiler construction 如何为编译器捕获令牌

Compiler construction 如何为编译器捕获令牌,compiler-construction,token,Compiler Construction,Token,我正在编写一段代码,同时创建自己的编译器。我正在设置一个标记器,用标记a、b、10和12识别dim a[10]、b[12] 我试图让函数识别a、10、b和12作为令牌,代码如下: while (startPos < line.length()) { if (line[startPos] == '[' || line[startPos] == ']' || line[startPos] == ',') { token[tokenNumber] = temp;

我正在编写一段代码,同时创建自己的编译器。我正在设置一个标记器,用标记a、b、10和12识别dim a[10]、b[12]

我试图让函数识别a、10、b和12作为令牌,代码如下:

  while (startPos < line.length()) {
   if (line[startPos] == '[' || line[startPos] == ']' || line[startPos] == ',') { 
      token[tokenNumber] = temp; 
      temp = "";
      tokenNumber++;
    }
    else {
      temp += line[startPos];
    }
    startPos++;
  }

  if (temp != "") {
    token[tokenNumber] = temp; 
    tokenNumber++; 
  }

  return tokenNumber;
}
目前,我得到的令牌是正确的,但是,我得到了一个介于a[10],b[12]之间的空白令牌,尽管我的预处理器去掉了所有空白


当找到右方括号和逗号时,我需要如何调整代码才能使方括号匹配并接受标记?

很容易看出为什么逗号会得到一个空标记:在[10]的右括号中添加一个标记,将temp变量设置为空,然后在“,'将just blanket temp变量添加为新标记

为什么不在循环中添加相同的保护,以防止温度变为空