实例介绍
Ninputer是一个专为编程语言编译器设计的灵活且可扩展的前端库,它包含了一系列的编译器工具和库。VBF(Ninputer的一部分)提供了分离的扫描器和解析器库,用户可以单独使用一个组件,也可以将它们全部结合起来使用。
如何构建:
首先,安装Visual Studio 2015并带有.Net Framework 4.5。打开选项对话框,转到“包管理器”并勾选“允许NuGet在构建期间下载缺失的包”。接着,打开项目VBF/src/Compilers/Compilers.sln并进行构建。构建完成后,二进制文件将放置在VBF/bin文件夹中。默认情况下,所有二进制文件都是延迟签名的,您可以选择禁用代码签名或使用'sn -Vr'命令绕过程序集验证,然后测试二进制文件。
组件:
VBF.Compilers.Common提供源文件阅读器、编译错误管理等功能。
VBF.Compilers.Scanners提供基于DFA的扫描器构建器,使用正则表达式。有多种类型的扫描器可供选择:标准Scanner、具有窥视n个令牌能力的PeekableScanner、可以分叉为多个扫描头的ForkableScanner。
VBF.Compilers.Parsers提供强大的基于GLR的、自动错误恢复的解析器生成器。开始时,继承ParserBase类并构建您自己的解析器。这对于大多数解析器来说是推荐的。
VBF.Compilers.Parsers.Combinators与Compilers.Parsers类似,但它是一个基于GLL的解析器组合库。与VBF.Compilers.Parsers相比,该库支持的语法相对较弱,解析速度也较慢。主要用于研究LL语法。
示例:
MiniSharp是一个完全功能的编译器,它是C#语言的一个非常小的子集。它包含了使用VBF构建的解析器和扫描器以及一个MSIL代码生成器。这对于编程语言和DSL作者来说是一个很好的示例。
【实例截图】
【核心代码】
文件清单
└── VBF-bd504d6a62a15a351a0e8ff3ce9a13de3914da78
├── LICENSE.txt
├── packagespecs
│ ├── VBF.Compilers.Common
│ │ └── VBF.Compilers.Common.nuspec
│ ├── VBF.Compilers.Parsers
│ │ └── VBF.Compilers.Parsers.nuspec
│ └── VBF.Compilers.Scanners
│ └── VBF.Compilers.Scanners.nuspec
├── README.md
├── resign.cmd
└── src
├── Compilers
│ ├── Compilers.Common
│ │ ├── CodeContract.cs
│ │ ├── Common
│ │ │ ├── DepthFirstSearch.cs
│ │ │ ├── DisjointSets.cs
│ │ │ ├── EditDistanceCalculator.cs
│ │ │ ├── PriorityQueue.cs
│ │ │ └── StringHelpers.cs
│ │ ├── CompilationError.cs
│ │ ├── CompilationErrorInfoCollection.cs
│ │ ├── CompilationErrorInfo.cs
│ │ ├── CompilationErrorList.cs
│ │ ├── CompilationErrorManager.cs
│ │ ├── CompilationStage.cs
│ │ ├── Compilers.Common.csproj
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── RevertPointCollection.cs
│ │ ├── RevertPoint.cs
│ │ ├── SourceLocation.cs
│ │ ├── SourceReader.cs
│ │ ├── SourceSpan.cs
│ │ └── StringBuilderReader.cs
│ ├── Compilers.Intermediate
│ │ ├── AssignInstruction.cs
│ │ ├── BinaryExpression.cs
│ │ ├── Compilers.Intermediate.csproj
│ │ ├── ConstValue.cs
│ │ ├── ConvertExpression.cs
│ │ ├── Expression.cs
│ │ ├── GotoInstruction.cs
│ │ ├── Instruction.cs
│ │ ├── Label.cs
│ │ ├── Operand.cs
│ │ ├── PrimaryType.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── ReceiveInstruction.cs
│ │ ├── TreeLang.cs
│ │ ├── UnaryExpression.cs
│ │ └── Variable.cs
│ ├── Compilers.Parsers
│ │ ├── AlternationProduction.cs
│ │ ├── AmbiguityAggregator.cs
│ │ ├── Compilers.Parsers.csproj
│ │ ├── ConcatenationProduction.cs
│ │ ├── DefaultValueContainer.cs
│ │ ├── EmptyProduction.cs
│ │ ├── EndOfStream.cs
│ │ ├── ErrorRecord.cs
│ │ ├── Generator
│ │ │ ├── ClosureVisitor.cs
│ │ │ ├── GeneratorVisitors.cs
│ │ │ ├── LR0Edge.cs
│ │ │ ├── LR0Item.cs
│ │ │ ├── LR0Model.cs
│ │ │ ├── LR0State.cs
│ │ │ ├── ProductionInfo.cs
│ │ │ ├── ProductionInfoManager.cs
│ │ │ ├── ReduceAction.cs
│ │ │ ├── SymbolConversion.cs
│ │ │ └── TransitionTable.cs
│ │ ├── Grammar.cs
│ │ ├── IProduction.cs
│ │ ├── IProductionVisitor.cs
│ │ ├── MappingProduction.cs
│ │ ├── PanicRecoverException.cs
│ │ ├── ParserBase.cs
│ │ ├── ParserEngine.cs
│ │ ├── ParserHeadCleaner.cs
│ │ ├── ParserHead.cs
│ │ ├── ParsingFailureException.cs
│ │ ├── ProductionBase.cs
│ │ ├── Production.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── ReduceVisitor.cs
│ │ ├── RepeatParserListNode.cs
│ │ ├── ResultInfo.cs
│ │ ├── SetHelpers.cs
│ │ ├── StackNode.cs
│ │ ├── SyntaxErrors.cs
│ │ └── Terminal.cs
│ ├── Compilers.Parsers.Combinators
│ │ ├── AlternationParser.cs
│ │ ├── AnyTokenParser.cs
│ │ ├── Compilers.Parsers.Combinators.csproj
│ │ ├── ConcatenationParser.cs
│ │ ├── ConvertHelper.cs
│ │ ├── EndOfStreamParser.cs
│ │ ├── ErrorCorrection.cs
│ │ ├── MappingParser.cs
│ │ ├── ParserContext.cs
│ │ ├── Parser.cs
│ │ ├── ParserFrame.cs
│ │ ├── ParserReference.cs
│ │ ├── ParserRunner.cs
│ │ ├── Parsers.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── RepeatParserListNode.cs
│ │ ├── Result.cs
│ │ ├── SucceedParser.cs
│ │ └── TokenParser.cs
│ ├── Compilers.Scanners
│ │ ├── AlternationCharSetExpression.cs
│ │ ├── AlternationExpression.cs
│ │ ├── CacheQueue.cs
│ │ ├── CharSetExpressionBuilder.cs
│ │ ├── Compilers.Scanners.csproj
│ │ ├── ConcatenationExpression.cs
│ │ ├── EmptyExpression.cs
│ │ ├── FiniteAutomationEngine.cs
│ │ ├── ForkableScannerBuilder.cs
│ │ ├── ForkableScannerCore.cs
│ │ ├── ForkableScanner.cs
│ │ ├── Generator
│ │ │ ├── CompactCharSetManager.cs
│ │ │ ├── CompressedTransitionTable.cs
│ │ │ ├── DFAEdge.cs
│ │ │ ├── DFAModel.cs
│ │ │ ├── DFAState.cs
│ │ │ ├── NFAConverter.cs
│ │ │ ├── NFAEdge.cs
│ │ │ ├── NFAModel.cs
│ │ │ └── NFAState.cs
│ │ ├── HistoryList.cs
│ │ ├── KleeneStarExpression.cs
│ │ ├── Lexeme.cs
│ │ ├── LexemeRange.cs
│ │ ├── LexemeValue.cs
│ │ ├── Lexer.cs
│ │ ├── Lexicon.cs
│ │ ├── PeekableScanner.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── RegularExpressionConverter.cs
│ │ ├── RegularExpression.cs
│ │ ├── RegularExpressionType.cs
│ │ ├── Scanner.cs
│ │ ├── ScannerException.cs
│ │ ├── ScannerInfo.cs
│ │ ├── StringLiteralExpression.cs
│ │ ├── SymbolExpression.cs
│ │ ├── Token.cs
│ │ ├── TokenInfo.cs
│ │ └── UnitTestVisibility.cs
│ ├── Compilers.sln
│ ├── Compilers.sln.DotSettings
│ ├── Compilers.UnitTests
│ │ ├── CommonTests.cs
│ │ ├── Compilers.UnitTests.csproj
│ │ ├── Compilers.UnitTests.snk
│ │ ├── GrammarTests.cs
│ │ ├── packages.config
│ │ ├── ParserBuilderTest.cs
│ │ ├── ParserCombinatorsTest.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── ScannersTest.cs
│ └── Key
│ ├── PublicKeyAndToken.txt
│ └── VBF.Public.snk
├── Samples
│ └── MiniSharp
│ ├── app.config
│ ├── ArrayType.cs
│ ├── Ast
│ │ ├── ArrayAssign.cs
│ │ ├── ArrayLength.cs
│ │ ├── ArrayLookup.cs
│ │ ├── Assign.cs
│ │ ├── AstNode.cs
│ │ ├── AstVisitor.cs
│ │ ├── Binary.cs
│ │ ├── Block.cs
│ │ ├── BooleanLiteral.cs
│ │ ├── BooleanType.cs
│ │ ├── Call.cs
│ │ ├── ClassDecl.cs
│ │ ├── Expression.cs
│ │ ├── FieldDecl.cs
│ │ ├── Formal.cs
│ │ ├── IAstVisitor.cs
│ │ ├── IdentifierType.cs
│ │ ├── IfElse.cs
│ │ ├── IntArrayType.cs
│ │ ├── IntegerLiteral.cs
│ │ ├── IntegerType.cs
│ │ ├── MainClass.cs
│ │ ├── MethodDecl.cs
│ │ ├── MethodRef.cs
│ │ ├── NewArray.cs
│ │ ├── NewObject.cs
│ │ ├── Not.cs
│ │ ├── Program.cs
│ │ ├── Statement.cs
│ │ ├── This.cs
│ │ ├── TypeConvert.cs
│ │ ├── Type.cs
│ │ ├── TypeRef.cs
│ │ ├── VarDecl.cs
│ │ ├── Variable.cs
│ │ ├── VariableRef.cs
│ │ ├── While.cs
│ │ └── WriteLine.cs
│ ├── CodeClassType.cs
│ ├── ExtensionTable.cs
│ ├── Field.cs
│ ├── MemberDeclResolver.cs
│ ├── MethodBodyResolver.cs
│ ├── Method.cs
│ ├── MethodOverloadingComparer.cs
│ ├── MiniSharp.csproj
│ ├── MiniSharpParser.CP.cs
│ ├── MiniSharpParser.cs
│ ├── MiniSharp.sln
│ ├── Parameter.cs
│ ├── PrimaryType.cs
│ ├── ProgramEntry.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Targets
│ │ └── Cil
│ │ └── EmitTranslator.cs
│ ├── TypeBase.cs
│ ├── TypeCollection.cs
│ ├── TypeDeclResolver.cs
│ ├── VariableCollection.cs
│ └── VariableInfo.cs
└── temp
├── CodeDomTranslator.cs
├── ForkNode.cs
├── Parser.cs
├── ParserFunc.cs
└── Parsers.cs
30 directories, 219 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论