Ejemplo n.º 1
0
	void Imperative_languageblock(out ProtoCore.AST.ImperativeAST.ImperativeNode node) {
		node = null; 
		ProtoCore.AST.ImperativeAST.LanguageBlockNode langblock = new ProtoCore.AST.ImperativeAST.LanguageBlockNode(); 
		
		Expect(10);
		NodeUtils.SetNodeLocation(langblock, t); 
		Expect(1);
		if( 0 == t.val.CompareTo(ProtoCore.DSASM.kw.imperative)) {
		   langblock.codeblock.Language = ProtoCore.Language.Imperative;
		}
		else if( 0 == t.val.CompareTo(ProtoCore.DSASM.kw.associative)) {
		   langblock.codeblock.Language = ProtoCore.Language.Associative; 
		}
		else {
		   langblock.codeblock.Language = ProtoCore.Language.NotSpecified; 
		   errors.SemErr(t.line, t.col, String.Format(Resources.InvalidLanguageBlockIdentifier, t.val));
		}
		
		Expect(11);
		Expect(45);
		Node codeBlockNode = null; 
		if (langblock.codeblock.Language == ProtoCore.Language.Associative ||
langblock.codeblock.Language == ProtoCore.Language.NotSpecified) {
			Hydrogen(out codeBlockNode);
		} else if (langblock.codeblock.Language == ProtoCore.Language.Imperative ) {
			Imperative(out codeBlockNode);
		} else SynErr(104);
		if (langblock.codeblock.Language == ProtoCore.Language.NotSpecified) {
			int openCurlyBraceCount = 0, closeCurlyBraceCount = 0; 
			ProtoCore.AST.ImperativeAST.CodeBlockNode codeBlockInvalid = new ProtoCore.AST.ImperativeAST.CodeBlockNode(); 
			ProtoCore.AST.ImperativeAST.ImperativeNode validBlockInInvalid = null; 
			while (closeCurlyBraceCount <= openCurlyBraceCount) {
				if (la.kind == 10) {
					Imperative_languageblock(out validBlockInInvalid);
					codeBlockInvalid.Body.Add(validBlockInInvalid); 
				} else if (la.kind == 45) {
					Get();
					openCurlyBraceCount++; 
				} else if (la.kind == 46) {
					Get();
					closeCurlyBraceCount++; 
				} else if (la.kind == 0) {
					Get();
					Expect(46);
					break; 
				} else if (StartOf(13)) {
					Get(); 
				} else SynErr(105);
			}
			codeBlockNode = codeBlockInvalid; 
		} else if (la.kind == 46) {
			Get();
		} else SynErr(106);
		langblock.CodeBlockNode = codeBlockNode; 
		node = langblock; 
	}
Ejemplo n.º 2
0
	void Imperative_languageblock(out ProtoCore.AST.ImperativeAST.ImperativeNode node) {
		node = null; 
		ProtoCore.AST.ImperativeAST.LanguageBlockNode langblock = new ProtoCore.AST.ImperativeAST.LanguageBlockNode(); 
		
		Expect(8);
		NodeUtils.SetNodeLocation(langblock, t); 
		Expect(1);
		if( 0 == t.val.CompareTo(ProtoCore.DSASM.kw.imperative)) {
		   langblock.codeblock.language = ProtoCore.Language.kImperative;
		}
		else if( 0 == t.val.CompareTo(ProtoCore.DSASM.kw.associative)) {
		   langblock.codeblock.language = ProtoCore.Language.kAssociative; 
		}
		else {
		   langblock.codeblock.language = ProtoCore.Language.kInvalid; 
		   errors.SemErr(t.line, t.col, String.Format(Resources.InvalidLanguageBlockIdentifier, t.val));
		}
		
		while (WeakSeparator(48,5,6) ) {
			if (IsLanguageBlockProperty()) {
				Expect(1);
				string key = t.val; 
				Expect(49);
				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);
				}
				
			} else if (la.kind == 1) {
				ProtoCore.AST.ImperativeAST.ImperativeNode attr = null; 
				Imperative_Attribute(out attr);
				if (attr != null) langblock.Attributes.Add(attr); 
			} else SynErr(106);
		}
		Expect(9);
		Expect(46);
		Node codeBlockNode = null; 
		if (langblock.codeblock.language == ProtoCore.Language.kAssociative ||
langblock.codeblock.language == ProtoCore.Language.kInvalid) {
			Hydrogen(out codeBlockNode);
		} else if (langblock.codeblock.language == ProtoCore.Language.kImperative ) {
			Imperative(out codeBlockNode);
		} else SynErr(107);
		if (langblock.codeblock.language == ProtoCore.Language.kInvalid ) {
			int openCurlyBraceCount = 0, closeCurlyBraceCount = 0; 
			ProtoCore.AST.ImperativeAST.CodeBlockNode codeBlockInvalid = new ProtoCore.AST.ImperativeAST.CodeBlockNode(); 
			ProtoCore.AST.ImperativeAST.ImperativeNode validBlockInInvalid = null; 
			while (closeCurlyBraceCount <= openCurlyBraceCount) {
				if (la.kind == 8) {
					Imperative_languageblock(out validBlockInInvalid);
					codeBlockInvalid.Body.Add(validBlockInInvalid); 
				} else if (la.kind == 46) {
					Get();
					openCurlyBraceCount++; 
				} else if (la.kind == 47) {
					Get();
					closeCurlyBraceCount++; 
				} else if (la.kind == 0) {
					Get();
					Expect(47);
					break; 
				} else if (StartOf(13)) {
					Get(); 
				} else SynErr(108);
			}
			codeBlockNode = codeBlockInvalid; 
		} else if (la.kind == 47) {
			Get();
		} else SynErr(109);
		langblock.CodeBlockNode = codeBlockNode; 
		node = langblock; 
	}