Ejemplo n.º 1
0
int main( )
{
    execute( Seq(
        If( True( ), Print( String( "hello " ) ), Print( True( ) ) ),
        If( Or( False( ), Neg( True( ) ) ), Print( Unit( ) ), Print( String( "world!\n" ) ) ) ) );
    execute( Seq(
        When( True( ), Print( String( "hello " ) ) ),
        Unless( False( ), Print( String( "world!\n" ) ) ) ) );
    execute( Print( Print( Seq( Print( True( ) ), Print( False( ) ) ) ) ) );
    execute( Print( Concat( String( "4" ), Show( True( ) ) ) ) );
    assert( value_to_bool( execute( IsDefined( String( "not defined" ) ) ) ) == false );
    execute(
        Seq( Set( String( "SomeVar" ), String( "12" ) ),
             Seq( Print( Get( String( "SomeVar" ) ) ),
                  Seq( Set( Concat( String( "S" ), String( "omeVar" ) ), String( "345\n" ) ),
                       Print( Get( Concat( String( "Some" ), String( "Var" ) ) ) ) ) ) ) );
    execute( Seq(
        If( True( ), Set( String( "hello " ), String( "hellos \n" ) ), Print( True( ) ) ), Print( Get( String( "hello " ) ) ) ) );
    execute( Seq( Scope( Set( String( "hi" ), True( ) ) ), Print( IsDefined( String( "hi" ) ) ) ) );
    assert(
        value_to_bool( execute( Seq( Seq( Set( String( "var" ), False( ) ), Scope( Set( String( "var" ), True( ) ) ) ), Get( String( "var" ) ) ) ) ) );
    execute(
        Seq(
            Seq( Set( String( "b1" ), True( ) ), Set( String( "b2" ), True( ) ) ),
            While(
                Or( Get( String( "b1" ) ), Get( String( "b2" ) ) ),
                If( Get( String( "b1" ) ),
                    Seq( Set( String( "b1" ), False( ) ), Print( String( "Hello" ) ) ),
                    Seq( Set( String( "b2" ), False( ) ), Print( String( "World" ) ) ) ) ) ) );
}
Ejemplo n.º 2
0
void tri(Ptr<Int> p)
{
  p = p + (me() << 4);
  Int n = *p;
  Int sum = 0;
  While (any(n > 0))
    Where (n > 0)
      sum = sum+n;
      n = n-1;
    End
  End
  *p = sum;
}
Ejemplo n.º 3
0
/* <Statement> ::= <Compound> | <Assign> | <If> | <Return> | <Write> | <Read> | <While> */
bool SyntaxAnalyzer::Statement()
{
    
	if(Compound())
    {
		logger.Log("<Statement> ::= <Compund>");
        return true;
    }
	else if(Assign())
    {
        logger.Log("<Statement> ::= <Assign>");
        return true;
    }
	else if(If())
    {
		logger.Log("<Statement> ::= <If>");
        return true;
    }
	else if(Return())
    {
		logger.Log("<Statement> ::= <Return>");
        return true;
    }
	else if(Write())
    {
		logger.Log("<Statement> ::= <Write>");
        return true;
    }
	else if(Read())
    {
		logger.Log("<Statement> ::= <Read>");
        return true;
    }
	else if(While())
    {
		logger.Log("<Statement> ::= <While>");
        return true;
    }
    else
    {
        return false;
    }
}
Ejemplo n.º 4
0
bool Parser::Stmt()
{
	if ("identifier" == tok) {
		if (!Assign()) return false;
		else {
			std::cout << "Stmt => Assign\n";
			return true;
		}
	} else if ("read" == lex) {
		if (!Read()) return false;
		else {
			std::cout << "Stmt => Read\n";
			return true;
		}
	} else if ("write" == lex) {
		if (!Write()) return false;
		else {
			std::cout << "Stmt => Write\n";
			return true;
		}
	} else if ("if" == lex) {
		if (!If()) return false;
		else {
			std::cout << "Stmt => If\n";
			return true;
		}
	} else if ("while" == lex) {
		if (!While()) return false;
		else {
			std::cout << "Stmt => While\n";
			return true;
		}
	} else {
		std::cout << "Error with statement\n";
		return false;
	}
}
Ejemplo n.º 5
0
// 函数块
void CodeGenerator::Block() {
    while(!isNext("}")) {
        CodeToken T = getToken();
        string value = T.value;
        if(value == "if") {
            If();
        } else if(value == "while") {
            While();
        } else if(value == "for") {
            For();
        } else if(value == "read") {
            match("("); addQuad("read", getToken().value, "$", "$"); match(")"); match(";");
        } else if(value == "write") {
            match("("); addQuad("write", getToken().value, "$", "$"); match(")"); match(";");
        } else if(value == "return") {
            addQuad("return", itos(getToken().num), "$", "$");   match(";");
        } else if(CodeToString(T) == "id") {
            CurToken--;
            Assign();
        } else {
            puts("函数块错误!!"); printf("in %d", CurLine()); exit(0);
        }
    }
}
Ejemplo n.º 6
0
bool syntaxparser::Statement(){
	bool bStatement = false;
	if (lexeme == "{"){
		bStatement = true;
		if(displayFlag){
			cout << "<Statement> ::= <Compound>" << endl;
			printproduction("<Statement> ::= <Compound>");
		}
		Compound();
	}
	else if (token == "identifier"){
		bStatement = true;
		if(displayFlag){
			cout << "<Statement> ::= <Assign>" << endl;
			printproduction("<Statement> ::= <Assign>");
		}
		Assign();
	}
	else if (lexeme == "if"){
		bStatement = true;
		if(displayFlag){
			cout << "<Statement> ::= <If>" << endl;
			printproduction("<Statement> ::= <If>");
		}
		If();
	}
	else if (lexeme == "return"){
		bStatement = true;

		if(displayFlag){
			cout << "<Statement> ::= <Return>" << endl;
			printproduction("<Statement> ::= <Return>");
		}
		Return();
	}
	else if (lexeme == "write"){
		bStatement = true;
		if(displayFlag){
			cout << "<Statement> ::= <Write>" << endl;
			printproduction("<Statement> ::= <Write>");
		}
		Write();
	}
	else if (lexeme == "read"){
		bStatement = true;

		if(displayFlag){
			cout << "<Statement> ::= <Read>" << endl;
			printproduction("<Statement> ::= <Read>");
		}
		Read();
	}
	else if (lexeme == "while"){
		bStatement = true;

		if(displayFlag){
			cout << "<Statement> ::= <While>" << endl;
			printproduction("<Statement> ::= <While>");
		}
		While();
	}
	return bStatement;
}
Ejemplo n.º 7
0
//=========================================================
bool Parser::FreeStatement () {
    PrintRule rule("FreeStatement");
    return rule.Accept(If() || While() || For());
}
Ejemplo n.º 8
0
TreeNode* Parser::Statement()
{
	kdDebug(0)<<"Parser::Statement()"<<endl;
	while (currentToken.type == tokEOL) getToken(); // statements can allways start on newlines
	switch (currentToken.type)
	{
		case tokLearn         : return Learn();            break;

		case tokIf            : return If();               break;
		case tokFor           : return For();              break;
		case tokForEach       : return ForEach();          break;
		case tokWhile         : return While();            break;
		case tokRun           : return ExternalRun();      break;
		case tokReturn        : return Return();           break;
		case tokBreak         : return Break();            break;
		case tokUnknown       : return Other();            break; //assignment or function call

		case tokClear         : return Clear();            break;
		case tokGo            : return Go();               break;
		case tokGoX           : return GoX();              break;
		case tokGoY           : return GoY();              break;
		case tokForward       : return Forward();          break;
		case tokBackward      : return Backward();         break;
		case tokDirection     : return Direction();        break;
		case tokTurnLeft      : return TurnLeft();         break;
		case tokTurnRight     : return TurnRight();        break;
		case tokCenter        : return Center();           break;
		case tokSetPenWidth   : return SetPenWidth();      break;
		case tokPenUp         : return PenUp();            break;
		case tokPenDown       : return PenDown();          break;
		case tokSetFgColor    : return SetFgColor();       break;
		case tokSetBgColor    : return SetBgColor();       break;
		case tokResizeCanvas  : return ResizeCanvas();     break;
		case tokSpriteShow    : return SpriteShow();       break;
		case tokSpriteHide    : return SpriteHide();       break;
		case tokSpritePress   : return SpritePress();      break;
		case tokSpriteChange  : return SpriteChange();     break;

		case tokPrint         : return Print();            break;
		case tokInputWindow   : return InputWindow();      break;
		case tokMessage       : return Message();          break;
		case tokFontType      : return FontType();         break;
		case tokFontSize      : return FontSize();         break;
		case tokRepeat        : return Repeat();           break;
		case tokRandom        : return Random();           break;
		case tokWait          : return Wait();             break;
		case tokWrapOn        : return WrapOn();           break;
		case tokWrapOff       : return WrapOff();          break;
		case tokReset         : return Reset();            break;
		
		case tokEOF           : return EndOfFile();        break;
		
		case tokEnd           : Error(currentToken, i18n("Cannot understand ']'"), 1050);
		                        getToken();
		                        return new TreeNode(currentToken, Unknown);
		                        break;

		case tokBegin         : Error(currentToken, i18n("Cannot understand '['"), 1050);
		                        getToken();
		                        return new TreeNode(currentToken, Unknown);
		                        break;

		default               : break;
	}
	if (currentToken.type != tokEnd)
	{
		Error(currentToken, i18n("Cannot understand '%1'").arg(currentToken.look), 1060);
	}

	getToken();
	return new TreeNode(currentToken, Unknown); // fall-though for unknowns
}