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; }
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; }