0

我很确定我的括号匹配正确,但是我收到错误“输入末尾的解析错误”无论我在该程序末尾附加多少或几个括号。由于这个错误的所有谷歌结果都说修复在括号中,我不知道它可能是什么。有人可以为我指出我愚蠢的小错误吗?:)

#include <stdio.h>
#include "/user/cse320/Projects/project06.support.h"
#include "/user/cse320/Projects/project06.hardware.h"

void execute()
{
  unsigned long int IRdecode;
  IRdecode = IR;
  IRdecode >> 30;

  if ( IRdecode == 0 )
  {

    unsigned int _reg = IR;
    unsigned int _imm = IR;

    _reg << 2;
    _reg >> 27;

    _imm << 9;

    write_reg_file( _reg, _imm );
  }

  if ( IRdecode == 00000002 )
  {

    unsigned int _op3 = IR;
    unsigned int _rd = IR;
    unsigned int _rs1 = IR;
    _op3 << 7;
    _op3 >> 26;

    _rd << 2;  
    _rd >> 30;

    _rs1 << 13;
    _rs1 >> 27;

    if ( _op3 == 00000001 ){
      //AND }
    if ( _op3 == 00000002 ){
      //OR } 
    if ( _op3 == 00000003 ){
      //XOR } 
    if ( _op3 == 00000005 ){
      //ANDN }
    if ( _op3 == 00000006 ){
      //ORN } 
    if ( _op3 == 00000007 ){
      //XNOR }
  } 
} 
4

4 回答 4

2

您正在使用 //AND }评论,它将评论同一行中的所有内容,结果}将被评论。

代码:

if ( _op3 == 00000001 ){
  //AND }                //here } will be commented.

你应该这样使用

 if ( _op3 == 00000001 ){
  //AND 
 }                          //now OK

或者

 if ( _op3 == 00000001 ){
  /*AND*/  }               //OK, as well
于 2011-03-25T03:37:47.280 回答
1

除非发生了什么奇怪的事情,否则我认为您的代码还有另一个问题(除了注释的问题):

_op3 << 7;
_op3 >> 26;

_rd << 2;  
_rd >> 30;

_rs1 << 13;
_rs1 >> 27;

这些位移操作完全没有用,因为结果被丢弃了。<<运算符就像运算符一样,+它接受两个操作数并产生一个结果。您希望以下内容做什么?

i + 4;
2 + 4;
1 + 9;

我认为您想要的是复合运算符:

_op3 <<= 7;

这相当于:

_op3 = op3 << 7;
于 2011-03-25T03:52:51.683 回答
0

看起来if语句的右大括号被意外注释掉了:

if ( _op3 == 00000001 ){
  //AND }
于 2011-03-25T03:36:22.760 回答
0

这可能不是你唯一的问题(因为你说在程序末尾添加很多大括号没有帮助)但是在这样的语句中......

if ( _op3 == 00000001 ){
  //AND }

//注释运行到行尾,因此您已经注释掉了右大括号。尝试使用/*AND*/等等。

如果这不能解决问题,请发布预处理的源代码,您可以使用gcc -E. 警告:这将产生一个非常大的文件,您应该将其缩减为您可以管理的最小的东西,但仍然会导致问题。

于 2011-03-25T03:38:06.690 回答