c# - 使用什么技术来编写在语言之间切换的解析器?

标签 c# asp.net-mvc razor viewengine

我对像 Razor View 引擎这样的解析器如何解析两种不同的语言(如 C# 和 JavaScript)很感兴趣。

下面的工作非常酷,例如:

$("#fm_duedate").val('@DateTime.Now.AddMonths(1).ToString("MM/dd/yyyy")');

我将尝试查看源代码,但我很好奇这样的解析器是否有某种理论基础,或者它是否更像采用两种语言的联合并解析它?

我试图为自己推理,我说“你从每种语言的解析器开始,然后你向每种语言添加一组将它切换到另一种的产品”,但我怀疑它如此简单。

我想完美的答案应该是讨论如何实现 Razor 引擎的指针或源代码的演练(我实际上没有用谷歌搜索这个因为害怕掉进兔子洞)。或者,只要对如何处理两种语言的解析问题有一些了解就会很好。

最佳答案

正如 Corey 指出的那样,Razor 和类似的框架并没有做任何特别花哨的事情。

然而,对于为一种语言嵌入另一种语言的语言构建解析器,存在一些理论上更合理的模型。我以前的同事 Luke Hoban 有一篇关于解析器组合器的很棒的介绍性文章,它提供了一种非常好的方法来为一种语言嵌入另一种语言的场景构建解析器:

http://blogs.msdn.com/b/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx

维基百科页面也非常简单:

http://en.wikipedia.org/wiki/Parser_combinator

关于c# - 使用什么技术来编写在语言之间切换的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081591/

相关文章:

c# - 我应该如何对返回模型的 Controller 进行单元测试?

c# - MVC 局部 View 问题

c# - 我可以让 mvc 模型验证对不同的编辑器使用不同的错误 css 样式吗?

c# - 带有 Unauthorize 状态代码和 Content//response 的 HttpResponseMessage 没有必需的 WWW-Authenticate header 字段

c# - C#中设置之间的歧义

c# - 如何使用 MediaStreamSource 播放原始广告 AAC 流?

c# - 如何在 C# 中停止然后启动 explorer.exe?

asp.net-mvc - 如何在 ASP.NET MVC 和 ASP.NET WEB API 应用程序之间共享身份验证?

jquery - 单击 Html.ActionLink + MVC4 打开 jQuery 对话框

c# - 为什么 HTML 助手 EditorFor of type file 在 C# 和 ASP.NET MVC 中生成多个文件字段?