基于C#.NET的在线编译方法的应用与研究
作者:翟红英 王波
来源:《计算机光盘软件与应用》2013年第07
        摘要:在线编译给计算机语言类网上教学带来了便利。本文提出的基于C#.NET的在线编译方法解决将网页上输入的源程序代码编译并执行,并将程序的运行结果在网页上输出的问题。
        关键词:在线编译;源程序;文本模式;图形模式
        中图分类号:TP311文献标识码:A文章编号:1007-9599 (2013) 07-0000-02
        1引言
        利用网络进行计算机语言类教学离不开编程的训练,在线编译不需要用户安装相应语言的编译环境,为学习者带来了便利。实现在线编译,有两个核心问题要解决,第一个问题就是如何把在网页上输入的源程序代码编译并执行;第二个问题是如何将程序的运行结果在网页上输出。本文利用ASP.NET技术生成动态交互式Web页,基于C#.NET实现C#语言的在线编译。
字符串截取在线
        2在线编译的实现方法
        在线编译主要是要建立一个流畅的C#语言编程环境,在整个过程中不需要学习者安装任何语言的编译器,编译正确的代码可以执行并输出结果,并可下载代码,保存成C#源文件格式,在线编译执行流程如图1所示。
        1在线编译执行流程
        2.1源程序的输入和读取
        源程序的输入是通过对Web表单的设计来实现的,具体解决方法就是提供一个文本框来输入C#源程序。因为编辑好的程序代码将以一个字符串的形式,作为所要编译的内容传送给编译器,编译器对此进行编译,并把编译的结果以一个字符串的形式返回。实现源代码显示的核心代码为:
       
        2.2在线编译的实现
        .NET框架提供了ICodeCompiler编译器执行接口,CSharpCodeProvider类实现此接口,并提供对C#代码生成器和代码编译器的实例访问,CompilerParameters类用于调用编译器的参数,这为实现网页上的在线编译提供了极大的便利。
        1)命名空间的使用。C#所编写的程序代码在每个开头必须引用命名空间,如编程时使用最普遍的是using System。在实现的过程中主要应用.NETSystem.CodeDom.CompilerMicrosoft.CSharp两个命名空间。因为在System.CodeDom.Compiler命名空间中的CompilerParameters类经过实例化后可以设置运行时所需要的编译参数。在Microsoft.CSharp命名空间中的CSharpCodeProvider类经过实例化后,可以提供对C#代码生成器和代码编译器的实例访问。
        2)调用用CSharpCodeProvider类的CompileAssemblyFromSource方法进行编译,将要被编译和执行的代码以字符串方式保存并读入。
        3)编译结果存放在CompilerResults的实例中
        4)判断编译的结果,错误数为0,表示编译成功,否则输出错误信息。有错误,把错误信息进行合并存放来显示。
        在这里解决方法是使用了StringBuilder,而没有使用String。因为一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。如果用字符串连接符“+”来达到附加新字符或字符串的目的,结果是会产生一个新的String实例,会增加系统的开销。具体实现代码如下:
        StringBuilder errorMessage=new StringBuilder()
        foreach(CompilerError error in compiler.Errors)
        {
        errorMessage.AppendFormat(“{0}{1}\r\n”error.Lineerror.ErrorText) //用带格式文本替换字符串中传递的格式说明符。
        }
        Errors=errorMessage.ToString()
        到目前为止,已经可以成功编译由网页输入的源程序代码,在实现方法中涉及到了一些
类,关于这些类的具体用法,由于篇幅的限制,请读者查阅相关的帮助文档,在此不再赘述。
        2.3源程序执行结果的输出
        把在网页上输入的源程序代码经过在线编译后,如果编译通过其执行结果在网页上进行输出。该在线编译系统对程序执行结果的输出分两种模式来设置。一种是文本模式,另一种是图形模式,不同的输出模式,解决方法也是不同的。
        1)文本模式输出。文本模式也称为控制台模式,指编译后的程序执行输出的结果为文本,针对这类程序的结果输出,解决方法是使用Literal Web服务器控件,在页面文本框中动态添加结果文本。
        2)绘图模式输出。有些程序输出的结果不是文本,而是图形,针对这类程序的结果输出,采用解决方法是定义一个绘图函数,用于后台的图片生成,通过img类的实例,把生成的图片在页面中进行显示,图2为在线编译画直线程序的实际输出效果。
        2在线编译画直线程序显示的结果
        3结束语
        在线编译在计算机编程教学和编程相关的认证、竞赛等领域有着广阔的前景。对于在线编译本文只给出了在教学网站上实际应用的一种解决方法,实际上随着.NET框架的发展,有更简便的方法和其他类可以来实现,对于一次编译多个文件的批量编译,本文由于篇幅限制没有讨论,实际上也非常有实用价值。
        参考文献:
        [1]徐明,采振祥.网站内容智能生成的技术实现[J].深圳大学学报(理工版),2000,17(4):41-46.
        [2]夏新恩.多媒体网络实验教学平台研究与实施[J].实验室研究与探索,2005,24(12):53-57.
        [3]王艳凤,胡志凌.网络实验教学的实现方式[J].实验技术与管理,2003,20(1):62-66.
        [4]张恒升,陈翰博,王伟,姜学锋.基于Ajax的在线编译器网络平台开发[J].价值工程,2010,2.
        [5]汪松松.基于在线服务模式的程序编译平台的研究[J].科技信息,2011,31.
        [作者简介]翟红英(1969-),女,北京联合大学师范学院电气信息系副教授,硕士研究生,主要研究方向:计算机图形学、虚拟现实、编译技术和计算机应用;王波(1970-),男,北京联合大学师范学院电气信息系讲师,硕士研究生,主要研究方向:计算机网络。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。