# MOPCodegen **Repository Path**: wang-yi-656/mopcodegen ## Basic Information - **Project Name**: MOPCodegen - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-11-17 - **Last Updated**: 2025-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 通过src/main/java/com/example/codegen/CodeGen*.java运行,可以将输入的class文件和输入的MOP程序文件生成对对应的宿主语言程序。 CodeGenJava.java可以生成Java程序, CodeGenCSharp.java可以生成C#程序,CodeGenCJ.java用于生成仓颉程序。 在程序运行前,设置输入的MOP程序文件的路径, 以及设置输出的宿主语言程序的路径。 目前转换后结果存放在同一个文件中。 ### 脚本生成各宿主语言程序 在当前目录下执行脚本gene-all.sh , -i参数为输入文件夹路径, -o参数为输出文件夹路径, -s参数为生成的程序的执行规模(默认值为1,可以设置为大于等于1的正整数) ```shell ./gene-all.sh -i src/main/resources/db -o src/main/resources/output/db -s 500 ``` 在java、cs、cj文件夹下分别生成对应的java、csharp、cangjie宿主语言程序 ``` ## javv javac *.java java Main ## csharp dotnet run example.csproj > log.out 2>&1 ##cj cjpm init cjpm build cjpm run ``` 可以进行目录中执行对应程序。 目前项目中src/main/resources/db、src/main/resources/web、src/main/resources/mtgcbenc、src/main/resources/list、src/main/resources/guava中文件夹下对应MOP程序,可以使用脚本生成对应的宿主语言程序。 src/main/resources/output目录中有各项目生成的宿主语言程序。 ### 单独执行 执行前,**请先使用src/main/resources/run.sh脚本生成主函数**, run.sh脚本第一个参数为MOP程序文件夹路径,脚本将对路径下的dslProgram.txt做出修改,第二个参数为生成程序的执行规模 ```shell cd src/main/resources bash run.sh guava 300 ``` 以当前项目中存在的guava MOP程序为例(**请保证路径文件夹存在**,若路径中文件夹不存在,请手动添加) Java语言执行方式: ```shell mvn package java -cp target/MOPCodeGen-1.0-jar-with-dependencies.jar com.example.codegen.CodeGenJava -i $input_dir -o $output_dir/java ``` $input_dir和$output_dir为输入输出路径, 运行程序后,会在$output_dir/java中生成Main.java文件以及全局变量初始化文件MainX.java,即为转换后的Java程序。之后可以直接运行 ```shell cd src/main/resources/java javac *.java java Main ``` C#语言执行类似 ```shell mvn package java -cp target/MOPCodeGen-1.0-jar-with-dependencies.jar com.example.codegen.CodeGenCSharp -i $input_dir -o $output_dir/cs ``` 运行后,会在outputJavaDir中生成cs文件, 之后建立dotnet项目,将所有cs文件加入项目中,之后可以直接运行 ```shell dotnet new console -o Example cd Example mv /path/*.cs ./ dotnet run example.csproj > log.out 2>&1 ``` 或者直接在当前示例目录下运行 ```shell dotnet run example.csproj > log.out 2>&1 ``` 仓颉语言执行方式 路径配置同上,其中CJUtils.isVariableNameNormalized是记录变量名是否符合变量命名规格化class_n形式,用于方便转化人工编写的MOP程序,对于自动转化出来的MOP程序请设置为true,对于人工编写且父子类无同名字段的MOP程序可以设置为false ```java CJUtils.isVariableNameNormalized = true;//true 表示变量命名规格化,为class_n,无特殊情况请默认为ture ``` ```shell mvn package java -cp target/MOPCodeGen-1.0-jar-with-dependencies.jar com.example.codegen.CodeGenCJ -i $input_dir -o $output_dir/cj ``` 获取到资源文件后,需要建立仓颉项目,将所有资源放于src文件夹路径下,然后编译执行(如果需要屏蔽编译过程中关于未使用变量的提醒,可以在配置文件cjpm.toml的compiler-option选项中添加-Woff unused) ```shell cd CJProm cjpm init mv /path/*.cj ./src cjpm build cjpm run ```