msgstr "ошибка разбора в конце ввода", но я уверен, что мои скобки верны.(в С) - PullRequest
0 голосов
/ 25 марта 2011

Я почти уверен, что мои скобки сопоставлены правильно, но я получаю ошибку "Ошибка разбора в конце ввода", независимо от того, сколько или несколько скобок я добавляю в конец этой программы.Поскольку все результаты Google по этой ошибке говорят о том, что исправление лежит в скобках, я не знаю, что еще это может быть.Может ли кто-нибудь указать на мою маленькую глупую ошибку для меня?:)

#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 ]

2 голосов
/ 25 марта 2011

вы используете //AND } для комментария, который будет комментировать все в одной строке, результаты } будут прокомментированы.

КОД:

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

Вы должны использовать как это

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

ИЛИ

 if ( _op3 == 00000001 ){
  /*AND*/  }               //OK, as well
1 голос
/ 25 марта 2011

Если не происходит что-то странное, я думаю, что есть и другая проблема с вашим кодом (кроме проблемы с комментариями):

_op3 << 7;
_op3 >> 26;

_rd << 2;  
_rd >> 30;

_rs1 << 13;
_rs1 >> 27;

Эти операции смещения битов совершенно бесполезны, потому что результатотбрасываются.Оператор << подобен оператору + в том смысле, что он принимает два операнда и выдает результат.Что вы ожидаете от следующего?

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

Я думаю, что вы хотите, чтобы составные операторы:

_op3 <<= 7;

Это эквивалентно:

_op3 = op3 << 7;
0 голосов
/ 25 марта 2011

Возможно, это не единственная ваша проблема (поскольку вы говорите, что добавление большого количества скобок в конце программы не помогает), но в таких утверждениях, как это ...

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

// комментариибегите до конца строки, поэтому вы закомментировали закрывающую скобку .Вместо этого попробуйте использовать /*AND*/ и т. Д.

Если это не решит проблему, пожалуйста, опубликуйте предварительно обработанный исходный код, который вы можете получить с помощью gcc -E.Предупреждение: это приведет к созданию очень большого файла, который вы должны сократить до мельчайшего, чем вы можете управлять, который все еще вызывает проблему.

0 голосов
/ 25 марта 2011

Похоже, что закрывающие скобки операторов if закомментированы:

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