大一第三次大作业-Python Interpreter

· · 个人记录

auto真香!!!

六周的大作业现在就给开始了(

Python部分语法:https://github.com/ACMClassCourse-2022/Python-Interpreter-2022/blob/main/docs/grammar.md

正则表达式:https://blog.csdn.net/jerryhanjj/article/details/115682097

解释器,又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。

解释器不会一次把整个程序转译出来,只像一位"中间人",每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。

它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。

我们要做的:利用树结构执行代码的功能

词法分析器(Lexer)

词法分析器又称为Scanner,Lexical analyser和Tokenizer。程序设计语言通常由关键字和严格定义的语法结构组成。编译的最终目的是将程序设计语言的高层指令翻译成物理机器或虚拟机可以执行的指令。词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),包括关键字,标识符,符号(symbols)和操作符供语法分析器使用。

语法分析器(Parser)

编译器又称为Syntactical analyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所允许的序列。

无论是Lexer还是Parser都是一种识别器,Lexer是字符序列识别器而Parser是Token序列识别器。他们在本质上是类似的东西,而只是在分工上有所不同而已。

#ifndef
#define

#endif

防止头文件重复调用

参考博客及更多功用:https://blog.csdn.net/weixin_41656968/article/details/80493923

https://blog.csdn.net/william_hehe/article/details/108230885

短路运算符:https://blog.csdn.net/qq284768116/article/details/103146534

try,catch,throw:报错

https://blog.csdn.net/wuwuku123/article/details/103509264

string,int,double转换:

https://blog.csdn.net/u010510020/article/details/73799996

https://blog.csdn.net/bcbhwbcbhw/article/details/107552800

c++向0取整,python向下取整

visit之后永远返回Any类

ctx以及其下属指针访问的返回的都是vector,需要加标号访问

如果一个节点是单个数据的话我们可以直接visitchildren来获得其中的数据

string的find函数:https://blog.csdn.net/qq_43738331/article/details/109780247

cmake里面真的很容易multiple definition

不能定义全局变量,如果要定义必须用static!

return{}用法:https://blog.csdn.net/u012011079/article/details/114080919

可以直接返回一个空的Any类极大简化返回操作

Any类真的很好用,建议多看看

但是注意使用的时候要及时转化成对应类型否则会炸

map.find()返回迭代器,里面是个pair,前者为键值,后者为存储的值

内联函数声明只能在头文件里进行,否则会炸