ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

毕设(五)形式化术语

2022-03-03 03:31:47  阅读:172  来源: 互联网

标签:function 术语 毕设 Partial 形式化 语法 token https com


call vs Invoke

invoke调用函数可以把参数写在函数名的后面,就像c中那样
call调用函数之前需要把参数压入堆栈,比invoke要多写几行push语句

参考:
https://bbs.csdn.net/topics/233487
https://www.cnblogs.com/ylj1103030017/p/14283519.html

Identifier(标志)

不能再拆了,作为变量的唯一标志,就像人的姓名一样。

Syntax(语法)

  • Concrete Syntax(AST),是你看得见的东西
  • Abstract Syntax(CST),是Evaluator等东西接受的数据结构
    • 简称 语法树 (Syntax tree)
    • 是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,
    • 之所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。

抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无关文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。因此,很多编译器经常要独立地构造语法分析树,为前端,后端建立一个清晰的接口。
抽象语法树在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器。

文本 -> 抽象语法树的过程

(1)词法分析:文本 -> token列表

  • 去除空格,对token分类,去除空格,然后对token分类,那些属于语法关键字,那些属于操作符,那些属于语句的截止位置,那些属于数据

(2)语法分析:token列表 -> 语法二叉树

  • 扫描token流,然后分析它的语法,这一步应该是分析一条以;结尾的语句具体的执行规则,然后使用逆波兰表达式组合,最后形成一个二叉树,二叉树从底部往上一步步合并

当生成树的时候,解析器会删除一些没必要的标识 tokens(比如:不完整的括号),因此 AST 不是 100% 与源码匹配的。
解析器100%覆盖所有代码结构生成树叫做CST(具体语法树)

链接:
https://juejin.cn/post/7030457038840791053
https://segmentfault.com/a/1190000016231512
https://juejin.cn/post/7030457038840791053
https://zhuanlan.zhihu.com/p/24756198

Partial function and total function

部分映射

上面是一个 String 转 Int 的函数,当输入是 Hello 时,是没有相对应的数字的,有着这样的特性的函数,我们会称为 Partial function。 Kotlin 在遇到 Partial function 时,有可能会因为接收到不预期的输入,而丢出一个 Exception 。通常我们会用一些防呆机制或是 try catch 来处理这样的状况。

完全映射

然而在 functional programming 中,我们不喜欢 Partial function,最好是所有的 function 都是 Total function。Total function 是什么呢?就是每一个 input 一定可以对应到 output 的其中一个值,如此一来我们就不会有任何例外发生,像一开始举的两个例子:f(x) = x + 1 与 f(x) = x * x 就是 Total function。

参考:https://www.dazhuanlan.com/flipturn/topics/1873335

标签:function,术语,毕设,Partial,形式化,语法,token,https,com
来源: https://www.cnblogs.com/sybil-hxl/p/15957968.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有