Example #1
0
// Runs several tests if enabled
static void consoleRunTests(void)
 {
 // Only for development
 // List all registered codes if it is enabled in conditional compilation
 #ifdef TEST_REGISTER
   registerList();
 #endif // TEST_REGISTER

 // Only for development
 // Test analog elements if it is enabled in conditional compilation
 #ifdef TEST_ANALOG
   analogTest();
 #endif //TEST_ANALOG

 // Only for development
 // Test Gyroscope if it is enabled in conditional compilation
 #ifdef TEST_GYRO
   gyrTest();
 #endif // TEST_GYRO

 // Only for development
 // Test Accelerometer if it is enabled in conditional compilation
 #ifdef TEST_ACCEL
   accelTest();
 #endif // TEST_ACCEL

 // Only for development
 // Test Accelerometer if it is enabled in conditional compilation
 #ifdef TEST_MAGNET
   magnetTest();
 #endif // TEST_MAGNET
 }
int evaluateSyntax(int scode){
	char *scodeStr=syntaxString[scode-NUMOFTOKEN];
	int *temp=syntaxInner[scode-NUMOFTOKEN];
	int j=1;
	if(currentToken<0){
		printf("EOF\n");return -1;
	}
	/*evaluate SPROGRAM*/
	if(scode==SPROGRAM){
		logPutOut(" evaluateSyntax(%s) line:%d\n",scodeStr,lastLineNumber);
		for(j=1;j<=5;j++){
			if(evaluateWord(temp[j])<0){
				errPrint("evaluateSyntax(%s)->(%d)",scodeStr,temp[j]);
			}
			if(j==2){
				setupProgram(tmpString);
#ifdef CSL
			    sprintf(cName,"%s.%s",filename,FILETYPE);
				if((cFile=fopen(cName,"w"))==NULL){
					exit(-1);
				}
				TAGCOMB("$$",idList.prog->name->name);
				START(tag);
				LAD("\t","gr0","0");
				CALL("\t","L1");
				tagnum++;
				CALL("\t","FLUSH");
				SVC("\t","0");
				fclose(cFile);
#endif
			}
		}
#ifdef CSL
		if((cFile=fopen(cName,"a"))==NULL) exit(-1);
		END("");
		//printTextFile("cFile","library.txt");
        fclose(cFile);
#endif
		return(scode);
	}
	/*evaluate SBROCK*/
	else if(scode==SBROCK){
		scope=idList.prog->name->name;
		logPutOut(" evaluateSyntax(%s) line:%d\n",scodeStr,lastLineNumber);
		do{
			if(currentToken==TVAR){ //except check
				pPrint(ALLOWINDENT);
				if(evaluateWord(SVARDECLARE)<0){
					errPrint("evaluateSyntax(%s)->(%d)",scodeStr,SVARDECLARE);
				}
			}else if(currentToken==TPROCEDURE){ //except check
				pPrint(ALLOWINDENT);
				if(evaluateWord(SSUBPROGDECLARE)<0){
					errPrint("evaluateSyntax(%s)->(%d)",scodeStr,TPROCEDURE);
				}
			}else{
				j++;
			}
		}while(j==1);
        pPrint(RESETINDENT);
#ifdef CSL
		if((cFile=fopen(cName,"a"))==NULL) exit(-1);
//        TAGNAME("L");
        TAGCOMB("L","1");
        TAGPRINT(tag);
        fclose(cFile);
#endif
		if(evaluateWord(temp[3])<0){
			errPrint("evaluateSyntax(%s)->(%d)",scodeStr,temp[3]);
		}
		return(scode);
	}
	/*evaluate SVARDECLARE*/
	else if(scode==SVARDECLARE){
		logPutOut(" evaluateSyntax(%s) line:%d\n",scodeStr,lastLineNumber);
		int tempType;
		for(j=1;j<=3;j++){
			if(evaluateWord(temp[j])<0){
				errPrint("no var(var declaretion)\n");
			}
			if(j==1){
				pPrint(ADDINDENT,1);
			}
		}
		if((tempType=evaluateWord(temp[j++]))<0){//j=4
			errPrint("must be type\n");
		}
		int arrayNum=0;
		if(tempType==SARRAY){
			arrayNum=tempArray.arrayNum;
			tempType=tempArray.type;
		}
		int k;
		for(k=0;k<tempListCount;k++){
#ifdef CSL
			if((cFile=fopen(cName,"a"))==NULL) exit(-1);
			if(arrayNum==0){
				if(scope==idList.prog->name->name){
					TAGCOMB("$",tempList->word);
				}else{
					TAGCOMB2("$",tempList->word,"\%",scope);
				}
				DC(tag,"0");
			}else{
				int arr;
				for(arr=0;arr<=arrayNum;arr++){
					if(scope==idList.prog->name->name){
						TAGCOMBARRAY("$",tempList->word,arr);
					}else{
						TAGCOMBARRAY2("$",tempList->word,arr,"\%",scope);
					}
					DC(tag,"0");
				}
			}
			fclose(cFile);
#endif
			if(registerList(tempList->word,tempType,arrayNum,lastLineNumber,POSI_VAR,scope)<0){
				errPrint("double variable\n");
			}
			tempList=tempList->next;
		}
		clearWordList();
		if(evaluateWord(temp[j++])<0){//j=5
			errPrint("must be ;\n");
		}
		while(1){
			int i=j=6;
				if(validateTopOfSyntax(temp[i])<0){// if there is no first word, it is correct
					break; //if nothing, its correct
				}else{
				pPrint(ALLOWINDENT);
				for(i=j;i<=temp[0];i++){
					if((tempType=evaluateWord(temp[i]))<0){// varlist
						printf("errEI1\n");return -1;
					}
					if(i==8){
						int arrayNum=0;
						if(tempType>SARRAY){
							arrayNum=tempType-SARRAY;
							tempType=SARRAY;
						}
						int k;
						for(k=0;k<tempListCount;k++){
#ifdef CSL
			if((cFile=fopen(cName,"a"))==NULL) exit(-1);
			if(arrayNum==0){
				if(scope==idList.prog->name->name){
					TAGCOMB("$",tempList->word);
				}else{
					TAGCOMB2("$",tempList->word,"\%",scope);
				}
				DC(tag,"0");
			}else{
				int arr;
				for(arr=0;arr<=arrayNum;arr++){
					if(scope==idList.prog->name->name){
						TAGCOMBARRAY("$",tempList->word,arr);
					}else{
						TAGCOMBARRAY2("$",tempList->word,arr,"\%",scope);
					}
					DC(tag,"0");
				}
			}
			fclose(cFile);
#endif
							if(registerList(tempList->word,tempType,arrayNum,lastLineNumber,POSI_VAR,scope)<0){
								errPrint("double variable\n");
							}
							tempList=tempList->next;
						}
						clearWordList();
					}
				}
			}
		}
	}
	/*evaluate SVARLIST*/
	else if(scode==SVARLIST){//1:{2} patern