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); } 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); } }
void languageblock(out Node node) { node = null; LanguageBlockNode langblock = new LanguageBlockNode(); Expect(6); 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 == 30) { Get(); string key; Expect(1); key = t.val; Expect(31); 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(7); Expect(26); langblock.codeblock.body = t.val.Substring(2,t.val.Length-4); node = langblock; ParseLanguageBlockNode(langblock); }