Exemplo n.º 1
0
	void LanguageBlock(out Node node) {
		node = null; 
		LanguageBlockNode langblock = new LanguageBlockNode(); 
		
		Expect(11);
		Expect(1);
		if( 0 == t.val.CompareTo("Imperative")) {
		langblock.codeblock.language = ProtoCore.Language.kImperative;
		}
		else if( 0 == t.val.CompareTo("Associative")) {
		langblock.codeblock.language = ProtoCore.Language.kAssociative; 
		}
		
		while (la.kind == 34) {
			Get();
			string key; 
			Expect(1);
			key = t.val; 
			Expect(35);
			Expect(4);
			if ("fingerprint" == key)
			{
			langblock.codeblock.fingerprint = t.val; 
			langblock.codeblock.fingerprint = langblock.codeblock.fingerprint.Remove(0,1); 
			langblock.codeblock.fingerprint = langblock.codeblock.fingerprint.Remove(langblock.codeblock.fingerprint.Length-1,1); 
			}
			else if ("version" == key)
			{
			langblock.codeblock.version = t.val; 
			langblock.codeblock.version = langblock.codeblock.version.Remove(0,1); 
			langblock.codeblock.version = langblock.codeblock.version.Remove(langblock.codeblock.version.Length-1,1);
			}
			
		}
		Expect(12);
		Expect(31);
		langblock.codeblock.body = t.val.Substring(2,t.val.Length-4);									
		node = langblock;
		                                ParseLanguageBlockNode(langblock);
		
	}
Exemplo n.º 2
0
    private void ParseLanguageBlockNode(LanguageBlockNode langblock)
    {     
        if (!core.langverify.Verify(langblock.codeblock))
        {
            return;
        }

        ProtoCore.ParserBase parser = null;
        System.IO.MemoryStream memstream = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(langblock.codeblock.body));

        if (langblock.codeblock.language ==  ProtoCore.Language.kImperative) 
            parser = new Imperative.Parser(new Imperative.Scanner(memstream), core);
        else if (langblock.codeblock.language == ProtoCore.Language.kAssociative) 
            parser = new Associative.Parser(new Associative.Scanner(memstream), core);
        else
            return;

        try
        {
            parser.errorStream = new System.IO.StringWriter();
            parser.Parse();

            if (parser.errorStream.ToString() != String.Empty)
                core.BuildStatus.LogSyntaxError(parser.errorStream.ToString());
            core.BuildStatus.errorCount += parser.errorCount;  

            langblock.codeBlockNode = parser.codeblock;
        }
        catch (ProtoCore.BuildHaltException e)
        {
            System.Console.WriteLine(e.errorMsg);
        }  
    }