Esempio n. 1
0
static bool parseIdentifier(LexerCarriage* carriage, Token* result)
{
    int shift = 0;
    while (carriage->posInText + shift < carriage->lexingText.length)
    {
        char ch = carriage->lexingText.pointer[carriage->posInText + shift];
        if (shift == 0)
        {
            if (isCharacter(ch) || ch == '_')
            {
                ++shift;
            }
            else break;
        }
        else
        {
            if (isCharacter(ch) || isDigit(ch) || ch == '_')
            {
                ++shift;
            }
            else break;
        }
    }

    if (shift != 0)
    {
        result->type = TOK_IDENTIFIER;
        result->identifierValue = StringSlice{ &carriage->lexingText.pointer[carriage->posInText], shift };

        carriage->posInText += shift;

        return true;
    }
    else return false;
}
QByteArray stringFromContents(const uint* contents, int count) {
  QByteArray ret;
  for(int a = 0; a < count; ++a) {
    if(isCharacter(contents[a]))
      ret.append(characterFromIndex(contents[a]));
    else
      ret += KDevelop::IndexedString::fromIndex(contents[a]).byteArray();
  }
  return ret;
}
QByteArray stringFromContents(const PreprocessedContents& contents, int offset, int count) {
  QByteArray ret;
  for(int a = offset; a < (count ? offset+count : contents.size()); ++a) {
    if(isCharacter(contents[a]))
      ret.append(characterFromIndex(contents[a]));
    else
      ret += KDevelop::IndexedString::fromIndex(contents[a]).byteArray();
  }
  return ret;
}
Esempio n. 4
0
char *OpenDDLParser::parseStructureBody( char *in, char *end, bool &error ) {
    if( !isNumeric( *in ) && !isCharacter( *in ) ) {
        ++in;
    }

    in = lookForNextToken( in, end );
    Value::ValueType type( Value::ddl_none );
    size_t arrayLen( 0 );
    in = OpenDDLParser::parsePrimitiveDataType( in, end, type, arrayLen );
    if( Value::ddl_none != type ) {
        // parse a primitive data type
        in = lookForNextToken( in, end );
        if( *in == Grammar::OpenBracketToken[ 0 ] ) {
            Reference *refs( ddl_nullptr );
            DataArrayList *dtArrayList( ddl_nullptr );
            Value *values( ddl_nullptr );
            if( 1 == arrayLen ) {
                size_t numRefs( 0 ), numValues( 0 );
                in = parseDataList( in, end, type, &values, numValues, &refs, numRefs );
                setNodeValues( top(), values );
                setNodeReferences( top(), refs );
            } else if( arrayLen > 1 ) {
                in = parseDataArrayList( in, end, type, &dtArrayList );
                setNodeDataArrayList( top(), dtArrayList );
            } else {
                std::cerr << "0 for array is invalid." << std::endl;
                error = true;
            }
        }

        in = lookForNextToken( in, end );
        if( *in != '}' ) {
            logInvalidTokenError( in, std::string( Grammar::CloseBracketToken ), m_logCallback );
            return ddl_nullptr;
        } else {
            //in++;
        }
    } else {
        // parse a complex data type
        in = parseNextNode( in, end );
    }

    return in;
}
Esempio n. 5
0
File: lexer.c Progetto: 8l/ark-c
void getNextToken(Lexer *self) {
	self->startPos = 0;
	skipLayoutAndComments(self);
	self->startPos = self->pos;

	if (isEndOfInput(self->currentChar)) {
		recognizeEndOfInputToken(self);
		self->running = false;	// stop lexing
		return;
	}
	else if (isDigit(self->currentChar) || (self->currentChar == '.' && isDigit(peekAhead(self, 1)))) {
		// number
		recognizeNumberToken(self);
	}
	else if (isLetterOrDigit(self->currentChar) || self->currentChar == '_') {
		// ident
		recognizeIdentifierToken(self);
	}
	else if (isString(self->currentChar)) {
		// string
		recognizeStringToken(self);
	}
	else if (isCharacter(self->currentChar)) {
		// character
		recognizeCharacterToken(self);
	}
	else if (isOperator(self->currentChar)) {
		// operator
		recognizeOperatorToken(self);
	}
	else if (isEndOfLine(self->currentChar)) {
		recognizeEndOfLineToken(self);
	}
	else if (isSeparator(self->currentChar)) {
		// separator
		recognizeSeparatorToken(self);
	}
	else {
		// errorneous
		recognizeErroneousToken(self);
	}
}
int Describe(char* str, int len, Object* object){
  if( isNil(object) )
    return DescribeNil(str, len, object);

  if( isConsCell(object) )
    return DescribeConsCell(str, len, object);

  if( isSymbol(object) )
    return DescribeSymbol(str, len, object);

  if( isInteger(object) )
    return DescribeInteger(str, len, object);

  if( isLambda(object) )
    return DescribeLambda(str, len, object);

  if( isPrimitiveFunc(object) )
    return DescribePrimitiveFunc(str, len, object);

  if( isContinuation(object) )
    return DescribeContinuation(str, len, object);

  if( isEnvironment(object) )
    return DescribeEnvironment(str, len, object);

  if( isBool(object) )
    return DescribeBool(str, len, object);

  if( isSpecialForm(object) )
    return DescribeSpecialForm(str, len, object);

  if( isCondition(object) )
    return DescribeCondition(str, len, object);

  if( isCharacter(object) )
    return DescribeCharacter(str, len, object);

  else
    return DescribeUnknown(str, len, object);
}
int Inspect(char* str, int len, Object* object){
  if( isNil(object) )
    return InspectNil(str, len, object);

  if( isConsCell(object) )
    return InspectConsCell(str, len, object);

  if( isSymbol(object) )
    return InspectSymbol(str, len, object);

  if( isInteger(object) )
    return InspectInteger(str, len, object);

  if( isLambda(object) )
    return InspectLambda(str, len, object);

  if( isPrimitiveFunc(object) )
    return InspectPrimitiveFunc(str, len, object);

  if( isContinuation(object) )
    return InspectContinuation(str, len, object);

  if( isEnvironment(object) )
    return InspectEnvironment(str, len, object);

  if( isBool(object) )
    return InspectBool(str, len, object);

  if( isSpecialForm(object) )
    return InspectSpecialForm(str, len, object);

  if( isCondition(object) )
    return InspectCondition(str, len, object);

  if( isCharacter(object) )
    return InspectCharacter(str, len, object);

  else
    return InspectUnknown(str, len, object);
}
Esempio n. 8
0
int canWalk(MAP* m, char character, int x, int y){
	return isValid(m, x, y) && !isWall(m, x, y) && !isCharacter(m, character, x, y);
}