如何将WordPress站点迁移到ArchDaily?

摘要:wordpress拷站,archdaily,90平方设计,清新大气企业公司网站源码点击查看 基于Swift的PrattParser项目 PrattParser项目概述 前段时间一直想着手恶补 编译原理 的相关知识, 一开始打算直接读大学的
wordpress拷站,archdaily,90平方设计,清新大气企业公司网站源码点击查看 基于Swift的PrattParser项目 PrattParser项目概述 前段时间一直想着手恶补 编译原理 的相关知识, 一开始打算直接读大学的 编译原理, 虽然内容丰富, 但是着实抽象难懂. 无意间看到B站的熊爷关于普拉特解析器相关内容, 感觉是一个非常好的切入点.所以就写了基于Swift版… 点击查看 基于Swift的PrattParser项目 PrattParser项目概述 前段时间一直想着手恶补 编译原理 的相关知识, 一开始打算直接读大学的 编译原理, 虽然内容丰富, 但是着实抽象难懂. 无意间看到B站的熊爷关于普拉特解析器相关内容, 感觉是一个非常好的切入点.所以就写了基于Swift版本的 PrattParser. 下面是我整理的项目中各个类以及其中函数的作用. 更加具体的请查看 PrattParser解释器项目类与函数 接下来, 我把整个项目UML图发出来, 大家可以借鉴查看. 更加具体的请查看 PrattParser的Swift项目UML图 接下来, 我就以 词法分析 、语法分析 、 中间代码生成 三部分逐步来说明一下这个 基于Swift的PrattParser项目 词法分析 词法分析的核心类是 Lexer, 输入的原始代码字符串 code, 输出的是一组词法单元 Token. 在词法分析器 Lexer 中, 核心函数就是 nextToken, nextToken函数职责一共有两个职责. 去除代码格式化的逻辑, 例如, 去除 空格 换行 等等. 这一步主要是通过调用 skipWhitespace() 函数实现的. public func skipWhitespace() {while (hasNext()) {if (word || word \t || word \n || word \r) {readCodeAction();} else {break}} }读取数学符号与数字并且生成 词法单元Token switch(word) { case :token PrattParser.Token(TokenType.PLUS, )break case - :token PrattParser.Token(TokenType.MINUS, -)break case * :token PrattParser.Token(TokenType.ASTERISK, *)break case / :token PrattParser.Token(TokenType.SLASH, /)break case ( :token PrattParser.Token(TokenType.LPAREN, ()break case ) :token PrattParser.Token(TokenType.RPAREN, ))break case ^ :token PrattParser.Token(TokenType.HAT, ^)break case nil :token PrattParser.Token(TokenType.EOF, )break default:if (isDigit(word)) {let num: String readNum();token PrattParser.Token(TokenType.NUM, num);return token;} else {throw LexerError.lexerError(message: Lexer error)} }生成词法单元函数 nextToken 的整体逻辑流程图如下所示. 基本涉及了词法分析器 Lexer 的所有函数. 这里要补充的一点的就是由于数学符号大部分是单个字符, 例如 - * / ( ), 这个读取直接生成即可. 但是数字可能是有多位的, 所以生成的过程需要通过循环一直查找. 在该项目中的代码实现中读取数字字符的逻辑代码主要存在于 readNum 函数中. public func readNum() - String {var num: String while (isDigit(word)) {num word ?? readCodeAction()}return num; }生成数字函数 readNum 的整体逻辑流程图如下所示. 在该项目中, 词法分析器Lexer 的外部驱动力是 语法分析器Parser, 也就是说语法分析器Parser一直在调用 Lexer 的 nextToken 函数从而不断地生成词法单元 Token. 语法分析 在 词法分析 模块, 我们了解到了 词法分析器Lexer 会为 语
阅读全文