视频与PR:https://github.com/terrajobst/minsk/blob/master/docs/episode-01.md

作者是 Immo Landwerth(https://twitter.com/terrajobst),微软 .NET 团队的项目经理。

这一集主要内容是一个原始的递归下降 Parser。

思路:

1.Lexer

(1) enum SyntaxKind

(2) abstract class SyntaxNode

(3) class SyntaxToken : SyntaxNode

(4) class Lexer

2.Expression

(1) abstract class ExpressionSyntax : SyntaxNode

(2) sealed class NumberExpressionSyntax : ExpressionSyntax

(3) sealed class BinaryEpressionSyntax : ExpressionSyntax

(4) sealed class ParenthesizedExpressionSyntax : ExpressionSyntax

3.Parser

(1) sealed class SyntaxTree

(2) class Parser

处理优先级的技巧:

public ExpressionSyntax ParseTerm()
{
var left = ParseFactor(); while (Current.Kind == SyntaxKind.PlusToken || Current.Kind == SyntaxKind.MinusToekn)
{
var operatorToken = NextToken();
var right = ParseFactor();
left = new BinaryEpressionSyntax(left, operatorToken, right);
} return left;
} public ExpressionSyntax ParseFactor()
{
var left = ParsePrimaryExpression(); while (Current.Kind == SyntaxKind.StarToken || Current.Kind == SyntaxKind.SlashToken)
{
var operatorToken = NextToken();
var right = ParsePrimaryExpression();
left = new BinaryEpressionSyntax(left, operatorToken, right);
} return left;
}

4.Evaluator

(1) class Evaluator

5. 其他

比如诊断信息等

C#语言点:

1.public override IEnumerable<SyntaxNode> GetChildren() => Enumerable.Empty<SyntaxNode>();

2.yield

最新文章

  1. lua 例子
  2. [转]Meta http-equiv属性详解
  3. Effective C++ -----条款19:设计class犹如设计type
  4. CloseableHttpResponse的使用
  5. chromium浏览器开发系列第四篇:如何调试最新chromium源码
  6. IT公司100题-21-输入n和m,和等于m
  7. Windows XP与Windows 7系统常见漏洞
  8. Codeforces Round #237 (Div. 2) B. Marathon(卡long long)
  9. eclipse集承jboss服务器
  10. js获取天气
  11. Church encoding
  12. 《JavaScript 闯关记》之表达式和运算符
  13. android第一天错误
  14. Matlab 之meshgrid, interp, griddata 用法和实例
  15. [WC2014]紫荆花之恋(动态点分治+替罪羊思想)
  16. sublime text 3 3103 注册码
  17. 测试开发之前端——No4.HTML5中的事件属性
  18. Android Studio自动排版的两种方法
  19. ASP.NET 之 EntityFramework实体框架搭建
  20. A Bug&#39;s Life-----poj2492(关系并查集)

热门文章

  1. Centos7 安装 weblogic12.2.1.0.0
  2. Python3基础 str : 对字符串进行切片
  3. glib 检索地址
  4. ES6深入浅出-4 迭代器与生成器-1.字面量增强
  5. hadoop记录-MapReduce之如何处理失败的task(转载)
  6. 【物联网】arduino wifi
  7. 【shell比较字符串】
  8. RobotFramework: 接口测试时,注意请求体content-type
  9. 【GStreamer开发】GStreamer基础教程09——收集媒体信息
  10. react-native 上拉加载