来者,揭去尘封。
编译原理第二章 文法和语言程序设计语言语法:一种规则,用它可以形成和产生一个合适的程序。阐明语法的工具是文法。语义静态语义:一系列的限定规则,并确定哪些合乎语法的程序是合适的。动态语义:运行语义或执行语义,表明程序要做什么,要计算什么。文法的直观概念当我们表述一种语言时,就是要说明这种语言的句子。如果语言只含有有穷多个句子,则只需穷举列出句子的有穷集。如果语言含有无穷多个句子,存在着如何给出它的有穷表示的问题。这需要一种规则,用这些规则来描述语言的结构,可以把这些规则看成一种元语言,这些规则(或语言)就称为文法。符号和符号串字母表:元素的非空集合,也称为符号集符号:字母表中的元素符号串:由字母表中的符号组成的任何有穷序列长度:如果某符号串x有m个符号,称其长度为m,表示为|x|=m空符号串:不包含任何符号的符号串,用|ε|=0表示符号串的头尾,固有头和固有尾:如果z=xy是一符号串,那么x是z的头,y是z的尾。如果x是非空的,那么y是固有尾;若y非空,x是固有头。头尾都有空串如:符号串abc头: ε, a, ab, abc尾:abc,bc, c, ε固有头: ε, a, ab固有尾:
8253引脚与内部结构引脚信号8位数据线D0~D7寻址控制线A0、A1、读写控制线各种通道与外设的接口时钟输入:CLK门控输入:GATE波形输出:OUT内部结构数据总线缓冲器8253与数据总线连接时的接口电路,8位双向三态缓冲器组成与CPU进行读写的信息都经D7~D0传送初始化编程8253时CPU写入的控制字CPU向某一计数器写入的计数初值CPU从计数器读出的计数值读/写控制逻辑接收I/O端口译码电路产生为0时工作为0时向3个计数器和控制口写入数据为0时从3个计数器读出数据,但不能读控制口A1A0,端口选择信号00,通道001,通道110,通道211,控制字寄存器计数器或计数通道0~33个相同而独立的计数器/定时器通道,每通道含有1个8位控制字寄存器、1个16位计数初值寄存器、1个计数执行部件、1个输出锁存器。CR16位初值寄存器CE减一计数器执行部件OL输出锁存器随时记录计数器的值,必要时可从中读出瞬时值。写入计数初值后,在门控信号控制下,对CLK脚上的脉冲进行-1计数。计数结束时,从OUT引脚输出脉冲信号。定时时间=时钟脉冲周期tc×预置的计数初值n计数初值=输入频率/输出频率控制
基础表达式变量如果变量可以为空,需要用?String? name //可以为null String name //不允许为nulllate前缀允许懒加载,使用该前缀的变量在被使用时才被初始化,即使已经被设了初值late String temperature = readThemometer();//使用时才会被初始化final为前缀的变量不能被重新赋值为另一个对象,但该变量的字段可以final obj = SomeClass(); obj.field1 = 'new value'; // 这是允许的 obj = AnotherClass(); // 这是不允许的const为前缀的变量自己和自己的字段都不被允许修改const obj = SomeConstClass(); obj.field1 = 'new value'; // 这是不允许的 obj = AnotherClass(); // 这也是不允许的你可以改变一个没有final、const前缀的变量,即使这个变量以前是constvar foo = const[]; foo = [1,
微处理器的结构和工作模式8086CPU的内部结构两大部分:总线接口单元BIU(Bus Interface Unit):与外部存储器以及I/O端口之间交换顺序,有段寄存器、6字节指令队列。指令执行单元EU(Execution Unit):负责执行指令,有通用寄存器和运算器ALU20位地址总线,16位数据总线8086的内部寄存器数据寄存器8086内部有4个16的数据寄存器:AX、BX、CX和DX,可以用来存放16位数据或地址信息,X为H时是高八位,X为L时是低八位,此时只用来存放8位数据不存放地址信息。AX (Accumulator):用于算术和逻辑操作。BX (Base):可用作索引(偏移量)。CX (Counter):用于循环和字符串操作。DX (Data):用于I/O操作和一些乘法和除法操作。指针寄存器地址指针SP (Stack Pointer):指向栈顶。BP (Base Pointer):用于数据存储和内存访问。变址寄存器SI (Source Index):源索引,通常用于字符串操作,在进行数据移动或字符串操作等任务时,SI寄存器通常与数据段寄存器(DS)配合使用。例如,在执行M
函数字符串字符串的rstrip()方法能删除字符串末尾的空白splitlines()方法逐行读取lstrip()删除左端空格创建副本python的函数在传递列表后如果要对列表进行修改操作的话,我们的原列表如果需要保留,那么作为传递得的列表需要时一个副本,这样进行修改操作不会影响到原始列表要创建副本,一般使用切片[:],在调用时创建列表的副本:function_name(list_name[:])传递任意数量的实参在python函数中我们会遇到不能确定传入多少参数到一个函数中的情况,这种情形下我们可以用*加在形参名称前来解决:def function_name(*args)这样我们在调用函数时,传递进去的所有参数都会被添加到一个元组当中被传递给函数,即使我们只传入一个参数也是如此('item1') ('item1','item2','item3')tips:通用形参名*args,也是这样收集任意数量的位置实参使用任意数量的关键字实参有时候会遇到预先不知道要传递给函数会是什么样的信息,这种情况下可以使用**前缀
Vergessen
没有超过电子烟的纯真