Esempio n. 1
0
        public static string Compile(string input)
        {
            input = input.Replace("\r", "");
            ANTLRStringStream Input  = new ANTLRStringStream(input);
            SugarCppLexer     lexer  = new SugarCppLexer(Input);
            CommonTokenStream tokens = new CommonTokenStream(lexer);

            SugarCppParser parser = new SugarCppParser(tokens);

            AstParserRuleReturnScope <CommonTree, IToken> t = parser.root();
            CommonTree ct = (CommonTree)t.Tree;

            if (parser.errors.Count() > 0)
            {
                StringBuilder sb = new StringBuilder();
                foreach (var error in parser.errors)
                {
                    sb.Append(error);
                    sb.Append("\n");
                }
                throw new Exception(sb.ToString());
            }

            CommonTreeNodeStream nodes  = new CommonTreeNodeStream(ct);
            SugarWalker          walker = new SugarWalker(nodes);

            Root ast = walker.root();

            TargetCpp target_cpp = new TargetCpp();

            return(ast.Accept(target_cpp).Render());
        }
Esempio n. 2
0
        private void Source_TextChanged_1(object sender, EventArgs e)
        {
            string input = this.Source.Text;

            File.WriteAllText("test.sc", input);
            try
            {
                TargetCpp sugar_cpp = new TargetCpp();
                var       result    = SugarCompiler.Compile(input, "test");
                this.Header.Text = result.Header;
                File.WriteAllText("test.h", this.Header.Text);
                this.Implementation.Text = result.Implementation;
                File.WriteAllText("test.cpp", this.Implementation.Text);
            }
            catch (Exception ex)
            {
                string output = string.Format("Compile Error:\n{0}", ex.Message);
                this.Header.Text = output;
            }
        }