Skip to content

pandyer/Cs2Dsl

 
 

Repository files navigation

Cs2Dsl

CSharp代码转dsl,一个经由Cs2Lua来的实验项目,用于研究将C#语言转换为一个通用的中间语言,在此基础上能够比较方便的翻译为不同的目标语言。 中间语言使用我的另一个开源项目Dsl【 https://github.com/dreamanlan/DSL 】,是一种通用的领域特定语言及其解析器。

【命令行】

Cs2Dsl [-enableinherit] [-enablelinq] [-outputresult] [-d macro] [-refbyname dllname alias] [-refbypath dllpath alias] [-src] csfile|csprojfile

其中:

macro = 宏定义,会影响被转化的c#代码里的#if/#elif/#else/#endif语句的结果。

dllname = 以名字(Assembly Name)提供的被引用的外部dotnet DLL,cs2dsl尝试从名字获取这些DLL的路径(一般只有dotnet系统提供的DLL才可以这么用)。

dllpath = 以文件全路径提供的被引用的外部dotnet DLL。

alias = 外部dll顶层名空间别名,默认为global, 别名在c#代码里由'extern alias 名字;'语句使用。

enableinherit = 此选项指明是否允许继承。


enablelinq = 此选项指明是否允许使用LINQ语法。

outputresult = 此选项指明是否在控制台输出最终转化的结果(合并为单一文件样式)。

src = 此选项仅用在refbyname/refbypath选项未指明alias参数的情形,此时需要此选项在csfile|csprojfile前明确表明后面的参数是输入文件。

Cs2Dsl的输出主要包括:

1、对应c#代码的转换出的dsl代码,每个c#顶层类对应一个dsl文件。

2、所有名字空间的定义dsl文件,此文件被1中文件引用,输出文件为cs2dsl_namespaces.dsl。

3、Cs2Dsl依赖的dsllib文件utility.dsl,输出文件名为cs2dsl_utility.dsl。

4、在c#代码里使用Cs2Dsl.Require明确指明要依赖的dsllib文件,这些文件需要自己放到Cs2Dsl.exe所在目录的子目录dsllib里,之后自动拷到输出目录。

【源由】

1、Cs2Lua采取基于c# Roslyn开源编译器的语法树直接翻译为lua的方式,由于c#语言的更新很快,在引入vs2017新语法的时候遇到了不少阻碍。同时考虑到也可能会有翻译为其它 目标语言的需求,定义一个适合转换的中间语言并将c#翻译为这个中间语言可能是一条相对便捷的路。

2、这个工程主要是实验目的,目前包括了一个简单的html javascript生成器用于测试。

About

基于vs2017 roslyn工程翻译c#到通用领域特定语言,再经由特定生成器翻译到目标语言

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 90.2%
  • Lua 8.0%
  • HTML 1.6%
  • Other 0.2%