Esempio n. 1
0
int parse_bitoperand( char **str, struct rule *rule )
{
    char *p = rule->operands[rule->operand_count].name;

    if( rule->operand_count == MAX_OPERANDS ) {
        fprintf( stderr, "Maximum operands/rule exceeded (%d) at line %d\n", MAX_OPERANDS, yyline );
        return -1;
    }

    while( isalnum(**str) || **str == '_' ) {
        *p++ = *(*str)++;
    }
    *p = '\0';
    CONSUME_CHAR(':');

    int size = parse_integer( str );
    if( size == -1 ) {
        return -1; 
    }
    rule->operands[rule->operand_count].bit_count = size;
    if( **str == 's' || **str == 'S' ) {
        (*str)++;
        rule->operands[rule->operand_count].is_signed = 1;
    } else if( **str == 'u' || **str == 'U' ) {
        (*str)++;
        rule->operands[rule->operand_count].is_signed = 0;
    }
    if( **str == '<' ) {
        (*str)++;
        CONSUME_CHAR('<');
        int lsl = parse_integer(str);
        if( lsl == -1 ) {
            return -1;
        }
        rule->operands[rule->operand_count].left_shift = lsl;
    }
    CONSUME_CHAR(')');

    rule->operands[rule->operand_count].bit_shift = rule->bit_count;
    rule->bit_count += size;
    rule->bits = rule->bits << size;
    rule->mask = rule->mask << size;
    rule->operand_count++;
    return 0;
}
Esempio n. 2
0
QStringList StringHandler::unparseStrings(QString value)
{
  QStringList lst;
  value = value.trimmed();
  if (value[0] != '{') return lst; // ERROR?
  int i=1;
  QString res;
  while (value[i] == '"') {
    i++;
    while (value.at(i) != '"') {
      CONSUME_CHAR(value,res,i);
      i++;
      /* if we have unexpected double quotes then, however omc should return \" */
      /* remove this block once fixed in omc */
      if (value[i] == '"' && value[i+1] != ',') {
        if (value[i+1] != '}') {
          CONSUME_CHAR(value,res,i);
          i++;
        }
      }
      /* remove this block once fixed in omc */
    }
    i++;
    if (value[i] == '}') {
      lst.append(res);
      return lst;
    }
    if (value[i] == ',') {
      lst.append(res);
      i++;
      res = "";
      while (value[i] == ' ')     // if we have space before next value e.g {"x", "y", "z"}
        i++;
      continue;
    }
    while (value[i] != '"' && value[i] != '\0') {
      i++;
      fprintf(stderr, "error? malformed string-list. skipping: %c\n", value[i].toAscii());
    }
  }
  return lst; // ERROR?
}
Esempio n. 3
0
QString StringHandler::unparse(QString value)
{
  QString res;
  value = value.trimmed();
  if (value.length() > 1 && value.at(0) == '\"' && value.at(value.length() - 1) == '\"') {
    value = value.mid(1, (value.length() - 2));
    for (int i=0; i < value.length(); i++) {
      CONSUME_CHAR(value,res,i);
    }
    return res;
  } else {
    return "";
  }
}