Canon/docs/contents/source.tex

256 lines
7.8 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[../main.tex]{subfiles}
\begin{document}
\section{源程序清单}
为了使得项目开发更加清晰程序中由五个C\#项目组成:
\begin{itemize}
\item Canon.Core 编译器的核心库,含有编译器的所有核心功能。
\item Canon.Tests 编译器核心库的测试库,含有项目中编写的所有单元测试。
\item Canon.Console 编译器的命令行版本程序,在核心库的基础上以命令行的方式同编译器进行交互。
\item Canon.Server 编译器的服务器版本程序以Web的方式同编译器进行交互。
\item Canon.Generator 用于生成源代码形式的LR(1)分析表的工具。
\end{itemize}
代码中的总行数如表\ref{tab:code_lines}所示。
\begin{table}[htbp]
\centering
\begin{tabular}{|l|r|r|r|r|r|}
\hline
语言 & 文件数 & 行数 & 空白行数 & 注释数 & 代码行数 \\
\hline
C\# & 132 & 13263 & 1889 & 978 & 10396 \\
Pascal & 95 & 4989 & 368 & 34 & 4587 \\
TypeScript & 8 & 521 & 52 & 7 & 462 \\
MSBuild & 6 & 195 & 23 & 2 & 170 \\
TypeScript Typings & 2 & 149 & 7 & 13 & 129 \\
HTML & 1 & 12 & 0 & 0 & 12 \\
Python & 1 & 111 & 26 & 0 & 85 \\
\hline
\end{tabular}
\caption{代码行数统计}
\label{tab:code_lines}
\end{table}
\subsection{Canon.Core项目}
\begin{verbatim}
.
├── Abstractions
│ ├── ICompilerLogger.cs
│   ├── IGrammarParser.cs
│   ├── ILexer.cs
│   ├── ISourceReader.cs
│   ├── ITransformer.cs
│   └── SyntaxNodeVisitor.cs
├── Canon.Core.csproj
├── CodeGenerators
│   └── CCodeBuilder.cs
├── Enums
│   ├── BasicType.cs
│   ├── ErrorEnums.cs
│   ├── GrammarEnums.cs
│   └── SemanticEnums.cs
├── Exceptions
│   ├── GrammarException.cs
│   ├── LexemeException.cs
│   ├── ReduceAndShiftConflictException.cs
│   └── ReduceConflictException.cs
├── GrammarParser
│   ├── Expression.cs
│   ├── GeneratedParser.g.cs
│   ├── GrammarBuilder.cs
│   ├── Grammar.cs
│   ├── LrState.cs
│   ├── PascalGrammar.cs
│   └── Terminator.cs
├── LexicalParser
│   ├── LexemeFactory.cs
│   ├── Lexer.cs
│   ├── LexRules.cs
│   └── SemanticToken.cs
├── SemanticParser
│   ├── CodeGeneratorVisitor.cs
│   ├── PascalArrayType.cs
│   ├── PascalBasicType.cs
│   ├── PascalFunctionType.cs
│   ├── PascalParameterType.cs
│   ├── PascalType.cs
│   ├── Symbol.cs
│   ├── SymbolTable.cs
│   ├── SyntaxTreeTraveller.cs
│   ├── TypeCheckVisitor.cs
│   └── TypeTable.cs
└── SyntaxNodes
├── AddOperator.cs
├── BasicType.cs
├── CompoundStatement.cs
├── ConstDeclaration.cs
├── ConstDeclarations.cs
├── ConstValue.cs
├── ElsePart.cs
├── Expression.cs
├── ExpressionList.cs
├── Factor.cs
├── FormalParameter.cs
├── IdentifierList.cs
├── IdentifierVarPart.cs
├── MultiplyOperator.cs
├── NonTerminatedSyntaxNode.cs
├── Parameter.cs
├── ParameterList.cs
├── Period.cs
├── ProcedureCall.cs
├── ProgramBody.cs
├── ProgramHead.cs
├── ProgramStruct.cs
├── RelationOperator.cs
├── SimpleExpression.cs
├── Statement.cs
├── StatementList.cs
├── SubprogramBody.cs
├── Subprogram.cs
├── SubprogramDeclarations.cs
├── SubprogramHead.cs
├── SyntaxNodeBase.cs
├── Term.cs
├── TerminatedSyntaxNode.cs
├── TypeSyntaxNode.cs
├── ValueParameter.cs
├── VarDeclaration.cs
├── VarDeclarations.cs
├── Variable.cs
└── VarParameter.cs
\end{verbatim}
\subsection{Canon.Console项目}
\begin{verbatim}
.
├── Canon.Console.csproj
├── Extensions
│   └── RootCommandExtensions.cs
├── Models
│   └── CompilerOption.cs
├── Program.cs
└── Services
├── Compiler.cs
├── CompilerLogger.cs
└── StringSourceReader.cs
\end{verbatim}
\subsection{Canon.Server项目}
\begin{verbatim}
.
├── appsettings.json
├── Canon.Server.csproj
├── client-app
│   ├── index.html
│   ├── package.json
│   ├── pnpm-lock.yaml
│   ├── public
│   │   └── pic
│   │   └── uncompiled.png
│   ├── src
│   │   ├── App.tsx
│   │   ├── main.tsx
│   │   ├── openapi.d.ts
│   │   ├── Pages
│   │   │   ├── HistoryPage.tsx
│   │   │   ├── Index.tsx
│   │   │   ├── InputField.tsx
│   │   │   ├── Loader.tsx
│   │   │   └── OutputField.tsx
│   │   └── vite-env.d.ts
│   ├── tsconfig.json
│   ├── tsconfig.node.json
│   └── vite.config.ts
├── Controllers
│   ├── CompilerController.cs
│   └── FileController.cs
├── DataTransferObjects
│   ├── CompileResponse.cs
│   └── SourceCode.cs
├── Dockerfile
├── Entities
│   └── CompileResult.cs
├── Extensions
│   └── ServiceCollectionExtensions.cs
├── Models
│   ├── Brush.cs
│   ├── CodeReader.cs
│   ├── CompilerLogger.cs
│   └── PresentableTreeNode.cs
├── Program.cs
├── Properties
│   └── launchSettings.json
├── Services
│   ├── CompileDbContext.cs
│   ├── CompilerService.cs
│   ├── DatabaseSetupService.cs
│   ├── GridFsService.cs
│   └── SyntaxTreePresentationService.cs
└── wwwroot
\end{verbatim}
\subsection{Canon.Generator项目}
\begin{verbatim}
.
├── Canon.Generator.csproj
├── Extensions
│   └── RootCommandExtension.cs
├── GrammarGenerator
│   ├── GenerateCommand.cs
│   ├── GeneratedGrammarParser.cs
│   ├── GeneratedTransformer.cs
│   └── GrammarExtensions.cs
├── Program.cs
└── SyntaxVisitorGenerator
└── SyntaxVisitorGenerator.cs
\end{verbatim}
\subsection{Canon.Tests项目}
\begin{verbatim}
.
├── Canon.Tests.csproj
├── GeneratedParserTests
│   └── GenerateParserTests.cs
├── GlobalUsings.cs
├── GrammarParserTests
│   ├── PascalGrammarFailedTests.cs
│   ├── PascalGrammarTests.cs
│   ├── SimpleGrammarTests.cs
│   ├── SimpleGrammarWithEmptyTests.cs
│   └── TerminatorTests.cs
├── LexicalParserTests
│   ├── CharacterTypeTests.cs
│   ├── DelimiterTests.cs
│   ├── ErrorSingleTests.cs
│   ├── IndentifierTypeTests.cs
│   ├── KeywordTypeTests.cs
│   ├── LexicalFileTests.cs
│   ├── NumberTests.cs
│   └── OperatorTypeTests.cs
├── SemanticTests
│   ├── ConstValueTests.cs
│   ├── PascalTypeTests.cs
│   ├── SymbolTableTests.cs
│   ├── SyntaxTreeTravellerTests.cs
│   ├── Tests.cs
│   └── TypeCheckVisitorTests.cs
└── Utils
├── CompilerHelpers.cs
├── EnumerableExtensions.cs
├── SampleSyntaxTreeVisitor.cs
├── StringSourceReader.cs
├── StringSourceReaderTests.cs
└── TestLogger.cs
\end{verbatim}
\end{document}