feat: add images in README
This commit is contained in:
parent
58deabb023
commit
1f83946607
|
@ -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"]
|
||||
|
|
66
Canon.sln
66
Canon.sln
|
@ -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
|
23
Canon.slnx
Normal file
23
Canon.slnx
Normal file
|
@ -0,0 +1,23 @@
|
|||
<Solution>
|
||||
<Folder Name="/.gitea/" />
|
||||
<Folder Name="/.gitea/workflows/">
|
||||
<File Path=".gitea/workflows/build.yaml" />
|
||||
<File Path=".gitea/workflows/integration_test.yaml" />
|
||||
<File Path=".gitea/workflows/test.yaml" />
|
||||
</Folder>
|
||||
<Folder Name="/scripts/">
|
||||
<File Path="scripts/build.sh" />
|
||||
<File Path="scripts/docker-compose.yaml" />
|
||||
<File Path="scripts/Dockerfile-build" />
|
||||
<File Path="scripts/integration_test.py" />
|
||||
</Folder>
|
||||
<Folder Name="/Solution Files/">
|
||||
<File Path="LICENSE" />
|
||||
<File Path="README.md" />
|
||||
</Folder>
|
||||
<Project Path="Canon.Console/Canon.Console.csproj" />
|
||||
<Project Path="Canon.Core/Canon.Core.csproj" />
|
||||
<Project Path="Canon.Generator/Canon.Generator.csproj" />
|
||||
<Project Path="Canon.Server/Canon.Server.csproj" />
|
||||
<Project Path="Canon.Tests/Canon.Tests.csproj" />
|
||||
</Solution>
|
47
README.md
47
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`。
|
||||
|
||||
### 在线编译网站
|
||||
|
||||
为了获得更好的调试体验和更好的分数,我们提供了一个在线编译运行网站,在获得编译结果的同时可以绘制输入源代码的语法树。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
该网站的后端位于`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`或者是发送电子邮件的方式联系我们。
|
||||
|
|
BIN
assets/syntax-tree.png
Normal file
BIN
assets/syntax-tree.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 159 KiB |
BIN
assets/website-overview.png
Normal file
BIN
assets/website-overview.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
Loading…
Reference in New Issue
Block a user