diff --git a/Canon.Server/Dockerfile b/Canon.Server/Dockerfile index 1d5cda8..2b0a91a 100644 --- a/Canon.Server/Dockerfile +++ b/Canon.Server/Dockerfile @@ -1,6 +1,6 @@ -FROM mcr.microsoft.com/dotnet/aspnet:8.0 +FROM mcr.microsoft.com/dotnet/aspnet:9.0 RUN apt update RUN apt install libfontconfig1 -y WORKDIR /App -COPY bin/Release/net8.0/publish . +COPY bin/Release/net9.0/publish . ENTRYPOINT ["dotnet", "Canon.Server.dll"] diff --git a/Canon.sln b/Canon.sln deleted file mode 100644 index db33a87..0000000 --- a/Canon.sln +++ /dev/null @@ -1,66 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Canon.Core", "Canon.Core\Canon.Core.csproj", "{63EC6CDA-0BF2-4DC6-BEC1-5A3083130E89}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Canon.Console", "Canon.Console\Canon.Console.csproj", "{3D1C0BA2-57F2-41B2-B024-7A0E54A91DA0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{CA16F23D-8355-4956-B929-082F92CE0C21}" - ProjectSection(SolutionItems) = preProject - scripts\build.sh = scripts\build.sh - scripts\integration_test.py = scripts\integration_test.py - scripts\Dockerfile-build = scripts\Dockerfile-build - scripts\docker-compose.yaml = scripts\docker-compose.yaml - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Canon.Tests", "Canon.Tests\Canon.Tests.csproj", "{E5F2B97B-3766-466D-9309-BA361F0CE15E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".gitea", ".gitea", "{AECBE745-8E56-49DE-B85E-CEF14DE65134}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{EAA3629C-CD74-4E1F-A7F8-76D1FF0EC925}" - ProjectSection(SolutionItems) = preProject - .gitea\workflows\test.yaml = .gitea\workflows\test.yaml - .gitea\workflows\integration_test.yaml = .gitea\workflows\integration_test.yaml - .gitea\workflows\build.yaml = .gitea\workflows\build.yaml - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Canon.Server", "Canon.Server\Canon.Server.csproj", "{401112EA-1A87-4D1C-9B6D-085309F4137E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Canon.Generator", "Canon.Generator\Canon.Generator.csproj", "{32C103C4-589C-4DC2-B173-55B1799B62CE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {63EC6CDA-0BF2-4DC6-BEC1-5A3083130E89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63EC6CDA-0BF2-4DC6-BEC1-5A3083130E89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63EC6CDA-0BF2-4DC6-BEC1-5A3083130E89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63EC6CDA-0BF2-4DC6-BEC1-5A3083130E89}.Release|Any CPU.Build.0 = Release|Any CPU - {3D1C0BA2-57F2-41B2-B024-7A0E54A91DA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D1C0BA2-57F2-41B2-B024-7A0E54A91DA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D1C0BA2-57F2-41B2-B024-7A0E54A91DA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D1C0BA2-57F2-41B2-B024-7A0E54A91DA0}.Release|Any CPU.Build.0 = Release|Any CPU - {E5F2B97B-3766-466D-9309-BA361F0CE15E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5F2B97B-3766-466D-9309-BA361F0CE15E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5F2B97B-3766-466D-9309-BA361F0CE15E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5F2B97B-3766-466D-9309-BA361F0CE15E}.Release|Any CPU.Build.0 = Release|Any CPU - {401112EA-1A87-4D1C-9B6D-085309F4137E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {401112EA-1A87-4D1C-9B6D-085309F4137E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {401112EA-1A87-4D1C-9B6D-085309F4137E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {401112EA-1A87-4D1C-9B6D-085309F4137E}.Release|Any CPU.Build.0 = Release|Any CPU - {32C103C4-589C-4DC2-B173-55B1799B62CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32C103C4-589C-4DC2-B173-55B1799B62CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32C103C4-589C-4DC2-B173-55B1799B62CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32C103C4-589C-4DC2-B173-55B1799B62CE}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {EAA3629C-CD74-4E1F-A7F8-76D1FF0EC925} = {AECBE745-8E56-49DE-B85E-CEF14DE65134} - EndGlobalSection -EndGlobal diff --git a/Canon.slnx b/Canon.slnx new file mode 100644 index 0000000..687882c --- /dev/null +++ b/Canon.slnx @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index da69626..40797d8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ 我们在此次课程设计中使用`dotnet`平台实现了一个名为`Canon`的Pascal-S编译器。 -> Cano n,中文名卡农,意为“规律”,亦是一种音乐作曲技巧。 +> Canon,中文名卡农,意为“规律”,亦是一种音乐作曲技巧。 编译器全部为自行编程实现,没有使用类似于`flex`和`bison`之类的前端辅助工具。词法分析使用自行实现的自动机算法,语法分析使用`LR(1)`文法,在项目中实现了一个简单的`LR(1)`分析器生成工具。语义分析和代码生成使用类似于语法制导翻译的技术,详细设计见课程设计说明。 @@ -39,6 +39,51 @@ latexmk main.tex 项目中提供了一个公开测试集的自动测试工具,使用`python`编写,需要在系统中安装`fpc`编译器和`gcc`编译器。脚本会自动使用`fpc`编译器和自行实现的编译器`pascc`编译所有的公开测试集输入代码,并比对两个编译器输出文件的执行结果是否一致。使用方法可参见`CI`文件`.gitea/workflows/integration_test.yaml`。 +### 构建 + +为了项目在头歌平台上运行,`Canon.Console`项目支持通过AOT编译,构建出一个静态链接musl libc的可执行文件。使用此种构建方式,除了需要安装.NET SDK, +还需要参考[交叉编译文档](https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/cross-compile)安装相关的依赖,例如`clang`和`musl`。 + +使用下面指令进行编译: + +```shell +cd Canon.Console +dotnet publish -r linux-musl-x64 +``` + +编译好的可执行文件位于`bin/Release/net9.0/linux-musl-x64/publish`,可执行文件名为`Canon.Console`。 + +### 在线编译网站 + +为了获得更好的调试体验和更好的分数,我们提供了一个在线编译运行网站,在获得编译结果的同时可以绘制输入源代码的语法树。 + +![website-overview](./assets/website-overview.png) + +![syntax-tree](./assets/syntax-tree.png) + +该网站的后端位于`Canon.Server`中,该网站的前端位于`Canon.Server/client-app`中。 + +该网站的后端依赖`mongodb`数据库,使用`docker`可以方便的启动一个`mongodb`数据库实例: + +```shell +docker run -d -p 27017:27017 mongo:7.0-jammy +``` + +启动网站后端: + +```shell +cd Canon.Server +dotnet run +``` + +启动网站前端: + +```shell +cd Canon.Server/client-app +pnpm install +pnpm run dev +``` + ## 支持 如果您在学习或者是抄袭的过程中发现了问题,我们十分欢迎您提出,您可以通过发起`issue`或者是发送电子邮件的方式联系我们。 diff --git a/assets/syntax-tree.png b/assets/syntax-tree.png new file mode 100644 index 0000000..b7e48aa Binary files /dev/null and b/assets/syntax-tree.png differ diff --git a/assets/website-overview.png b/assets/website-overview.png new file mode 100644 index 0000000..c7a6013 Binary files /dev/null and b/assets/website-overview.png differ