当前位置:中华语录网 > 正文

短语编译原理 (编译原理短语意思)

视频推荐

步骤/方法

作者:pixelcao,腾讯 IEG 后台开发工程师

一、引子

最近的工作需要用表达式做一些参数的配置,然后发现大脑一片空白,在 Google 里试了几个关键词(起初搜了下“符号引擎”,发现根本不是我想要的)之后,明白过来自己应该是需要补一些编译原理的知识了。在掉了两晚上头发之后,决定整理一下自己的知识网络。

要解析的表达式大概长这个样子:

avg(teams

3.3 词法分析器

lexer 我们选择自己用 golang 编写。lexer 的基本功能是通过一个 buffer reader 不断读取文本,然后告诉 goyacc 遇到的是什么符号。

Lex 函数的返回值类型(即词法分析器的实际产物)需要在后面的 yacc 文件的 token 部分定义。

为了与 goyacc 结合,我们需要定义和实现以下接口:

type Scanner struct { buf   *bufio.Reader data  interface{} err   error debug bool}func NewScanner(r io.Reader, debug bool) *Scanner { return &Scanner{  buf:   bufio.NewReader(r),  debug: debug, }}func (sc *Scanner) Error(s string) { fmt.Printf(&34;, jsonobj) jsonStr, _ := json.Marshal(jsonobj) fmt.Printf(string(jsonStr))}

四、参考文献

  • 编译原理(基础篇)
  • golang 实现自定义语言的基础
  • 什么是 NFA 和 DFA
  • 从 antlr 扯淡到一点点编译原理
  • How to Write a Parser in Go