likes
comments
collection
share

手写 X 语言第一步,持续更新

作者站长头像
站长
· 阅读数 51

自定义语言整体思路

手写 X 语言第一步,持续更新

肖哥弹架构 跟大家“弹弹” 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

历史热点文章

基础语法规则定义

0. 词法规范(Lexical Rules)

  • 空白字符:空格、制表符、换行符等,用于分隔词素。

  • 注释:单行注释以 // 开始,多行注释以 /* 开始,以 */ 结束。

  • 关键字ifelsewhileforfunctionreturntruefalsenullclassnew, 等。

  • 标识符:以字母或下划线开头,后跟字母、数字或下划线的序列。

  • 字面量

    • 整数(123
    • 浮点数(123.45
    • 字符串("hello"),支持转义字符。
    • 布尔值(truefalse
    • 空值(null
  • 操作符

    • 算术:+-*/%
    • 赋值:=+=-=*=/=
    • 比较:==!=><>=<=
    • 逻辑:&&||!
    • 位操作:&|^<<>>>>>
    • 成员访问:.
  • 程序结构

    • 程序由一个或多个函数或类定义组成。
    • 程序入口点是一个特殊的 main 函数。

1. 变量声明

  • 变量必须在使用前声明,并明确指定类型。
let myVar: int = 10;

2. 常量声明

  • 常量一旦赋值后,其值不可更改。
const pi: float = 3.14159;

3. 数据类型

  • 支持基本数据类型和复合数据类型。
let myString: string = "Hello, XiaoGe!";
let myArray: int[] = [1, 2, 3];

4. 控制流语句

  • 支持 if-elsewhileforbreakcontinue
if (condition) {
    // code block
} else {
    // code block
}

while (condition) {
    // code block
}

for (let i: int = 0; i < length; i++) {
    // code block
}

5. 函数定义

  • 函数必须指定返回类型,如果没有返回值,使用 void
function add(a: int, b: int): int {
    return a + b;
}

6. 类和对象

  • 类用于创建对象,支持构造函数和析构函数。
class Point {
    let x: int;
    let y: int;

    function constructor(x: int, y: int) {
        this.x = x;
        this.y = y;
    }

    function destructor() {
        // clean up code
    }

    function display() {
        print("Point(", this.x, ", ", this.y, ")");
    }
}

let point: Point = new Point(3, 4);
point.display();

高级特性

7. 继承和多态

  • 支持类继承和方法重写。
class Shape {
    function area(): float {
        return 0.0;
    }
}

class Circle : Shape {
    let radius: float;

    function constructor(radius: float) {
        this.radius = radius;
    }

    override function area(): float {
        return 3.14159 * radius * radius;
    }
}

8. 接口

  • 接口定义了一组方法规范。
interface Drawable {
    function draw();
}

class Rectangle : Drawable {
    function draw() {
        // drawing code
    }
}

9. 泛型

  • 支持泛型定义,允许类型参数化。
class List<T> {
    let elements: T[];

    function add(element: T) {
        elements.append(element);
    }
}

let intList: List<int> = new List<int>();
intList.add(1);

10. 异常处理

  • 支持 try-catch-finally 语句。
try {
    // code that might throw an exception
} catch (e: Exception) {
    // handle exception
} finally {
    // clean up code
}

11. 命名空间

  • 支持命名空间来组织代码。
namespace MyNamespace {
    function foo() {
        // code
    }
}

MyNamespace.foo();

12. 访问修饰符

  • 支持 publicprivateprotected 访问控制。
class MyClass {
    public function publicMethod() {
        // code
    }

    private function privateMethod() {
        // code
    }

    protected function protectedMethod() {
        // code
    }
}

13. 静态成员

  • 支持静态方法和属性。
class MathUtils {
    static let pi: float = 3.14159;

    static function add(a: int, b: int): int {
        return a + b;
    }
}

print(MathUtils.pi);
let result = MathUtils.add(5, 3);

14. 枚举

  • 支持枚举类型定义。
enum Color {
    RED,
    GREEN,
    BLUE
}

let myColor: Color = Color.RED;

15. 委托和事件

  • 如果适用,支持委托和事件的机制。
delegate void EventHandler();

class Button {
    event EventHandler onClick;

    function click() {
        if (onClick != null) {
            onClick();
        }
    }
}

let button = new Button();
button.onClick += () => print("Button clicked!");
button.click();

16. 注释

  • 支持单行和多行注释。
// This is a single-line comment.

/* This is a
   multi-line comment. */

17. 模块化

  • 支持模块化编程,使用 import 和 export
module MathModule {
    export function add(a: int, b: int): int {
        return a + b;
    }
}

import MathModule;

let result = MathModule.add(5, 3);

18. 标准库

语法规范:

  • 定义标准库中的每个函数和类的名称、参数、返回类型。
  • 规定命名空间的使用,以组织标准库中的组件。

示例:

namespace std.io {
    function print(a: any): void;
}

19. 编译和运行时

编译过程:

  • 描述源代码到字节码或机器码的转换过程。
  • 规定编译器前端(词法分析、语法分析、语义分析)和后端(代码生成、优化)的工作。

运行时环境:

  • 定义垃圾回收机制、异常处理、类型检查等运行时行为。

示例:

// 案例,表示编译过程
source_code -> Lexer -> Parser -> AST -> BytecodeGenerator -> MachineCode

20. 安全性

内存安全:

  • 规定如何避免缓冲区溢出、内存泄漏等。

类型安全:

  • 确保类型的正确使用,避免类型错误。

示例:

// 强制类型转换,需要显式进行以保证类型安全
let num: int = 10;
let str: string = cast<string>(num);

21. 性能特性

优化策略:

  • 描述编译时和运行时的优化技术,如内联展开、循环优化等。

示例:

// 编译器优化选项
function optimize(code: Bytecode): Bytecode {
    // 实现优化逻辑
}

22. 调试和测试

调试工具:

  • 提供断点、单步执行、变量观察等功能。

测试框架:

  • 定义测试用例的编写和执行方式。

示例:

// 案例,表示测试框架
describe("Array Tests", () => {
    it("should handle push and pop", () => {
        let array = new Array();
        array.push(1);
        expect(array.pop()).toBe(1);
    });
});

23. 文档和注释

注释规范:

  • 规定单行和多行注释的语法。

文档生成:

  • 描述如何从注释中自动生成API文档。

示例:

/**
 * 向控制台打印内容
 * @param a The value to print.
 */
function print(a: any): void {
    // ...
}

24. 国际化和本地化

字符串处理:

  • 规定字符串的编码格式,如UTF-8。

本地化处理:

  • 提供本地化资源管理和字符串查找机制。

示例:

// 案例,表示本地化
let localizedString = localize("greeting", "Hello, World!");

25. 扩展性

插件和扩展机制:

  • 允许通过插件扩展语言功能。

示例:

// 案例,表示插件系统
class PluginSystem {
    function loadPlugin(name: string): void {
        // 加载并注册插件
    }
}

历史热点文章

转载自:https://juejin.cn/post/7388547512103862310
评论
请登录