手写 X 语言第一步,持续更新
自定义语言整体思路
肖哥弹架构 跟大家“弹弹” 业务中设计模式的使用,需要代码关注
欢迎 点赞,点赞,点赞。
关注公号Solomon肖哥弹架构获取更多精彩内容
历史热点文章
- 外观模式(Facade Pattern):微服务架构中的数据库访问实战案例分析
- 代理模式(Proxy Pattern):权限校验API调用实战案例分析
- 桥接模式(Bridge Pattern):多样式用户界面组件实战案例分析
- 组合模式(Composite Pattern): 在线教育平台课程管理实战案例分析
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
基础语法规则定义
0. 词法规范(Lexical Rules)
-
空白字符:空格、制表符、换行符等,用于分隔词素。
-
注释:单行注释以
//
开始,多行注释以/*
开始,以*/
结束。 -
关键字:
if
,else
,while
,for
,function
,return
,true
,false
,null
,class
,new
, 等。 -
标识符:以字母或下划线开头,后跟字母、数字或下划线的序列。
-
字面量:
- 整数(
123
) - 浮点数(
123.45
) - 字符串(
"hello"
),支持转义字符。 - 布尔值(
true
,false
) - 空值(
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-else
、while
、for
、break
、continue
。
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. 访问修饰符
- 支持
public
、private
、protected
访问控制。
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 {
// 加载并注册插件
}
}
历史热点文章
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析
转载自:https://juejin.cn/post/7388547512103862310