Finite State Machine (FSM) Finite Automata (FA)

Review: some basic concepts

<aside> 💡

Program: strings in specific symbols

</aside>

<aside> 💡

Grammar: a set of rules to generate a well-formed program by using it

</aside>

Review: basic function and hierarchy

<aside> 💡

describe the processing procedures for certain data

</aside>

这段文字描述了有限状态机(Finite State Machine, FSM)和有限自动机(Finite Automata, FA)的基本功能和层次结构,并且提到了程序语言的功能及其层次结构。以下是详细的解读:

有限状态机(FSM)和有限自动机(FA)

基本功能

层次结构

程序语言的功能

描述数据和数据处理过程

程序的层次结构

层次结构示例

示例

FSM 和 FA 在词法分析中的应用

假设我们要编写一个简单的词法分析器来识别整数常量、标识符和关键字。我们可以使用 FSM 或 FA 来描述这个过程:

  1. 整数常量识别
    • 初始状态为 S0。
    • 如果读到数字(0-9),转移到下一个状态 S1 并继续读取。
    • 如果读到非数字,则结束整数常量的识别。
  2. 标识符识别
    • 初始状态为 S0。
    • 如果读到字母(a-z, A-Z)或下划线(_),转移到下一个状态 S2 并继续读取。
    • 如果读到数字(0-9),保持在状态 S2 并继续读取。
    • 如果读到非字母和非数字,则结束标识符的识别。
  3. 关键字识别
    • 初始状态为 S0。
    • 如果读到特定的关键字序列(如 if, else, while 等),则识别为关键字。

程序的层次结构示例

假设我们有一个简单的 C++ 程序:

#include <iostream>

// 函数定义
int add(int a, int b) {
    return a + b;
}
// 类定义
class SimpleMath {
public:
    int multiply(int a, int b) {
        return a * b;
    }
};
int main() {
    // 调用函数
    int sum = add(3, 4);
    std::cout << "Sum: " << sum << std::endl;
    // 创建类的实例
    SimpleMath math;
    int product = math.multiply(3, 4);
    std::cout << "Product: " << product << std::endl;
    return 0;
}

在这个例子中:

总结

通过这些层次结构,程序语言可以更好地组织和描述数据处理过程,使得程序更加模块化、可读性和可维护性更强。

Some basic terms

Alphabet table:

<aside> 💡

a set of non-empty finite elements (symbols), written by $∑$

• {a, b, c, +, …}

</aside>

Every element in the table called string

这段文字介绍了几种基本术语,特别是关于符号集(Alphabet)和字符串(String)的概念。以下是详细的解读:

符号集(Alphabet)

定义

示例

字符串(String)

定义

示例

特殊字符串:空序列和空字符串

所有可能的字符串集合:$\Sigma^*$

示例

总结

通过这些基本术语,可以更好地理解形式语言和自动机理论中的概念,这些概念在编译原理、模式匹配等领域中有广泛的应用。

Some examples

If x is a string of $∑$ and a∈ $∑$then xa/ax is a string of $∑$