我对像 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
维基百科页面也非常简单:
关于c# - 使用什么技术来编写在语言之间切换的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081591/