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

基础语法规则定义

0. 词法规范(Lexical Rules)

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

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

  • 关键字ifelsewhileforfunctionreturntruefalsenullclassnew, 等。

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

  • 字面量

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

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

    • 程序由一个或多个函数或类定义组成。
    • 程序入口点是一个特殊的 main 函数。
1. 变量声明
  • 变量必须在使用前声明,并明确指定类型。
 

ini

复制代码

let myVar: int = 10;

2. 常量声明
  • 常量一旦赋值后,其值不可更改。
 

ini

复制代码

const pi: float = 3.14159;

3. 数据类型
  • 支持基本数据类型和复合数据类型。

 整理了这份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记【点击此处】即可免费获取

ini

复制代码

let myString: string = "Hello, XiaoGe!"; let myArray: int[] = [1, 2, 3];

4. 控制流语句
  • 支持 if-elsewhileforbreakcontinue
 

csharp

复制代码

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

5. 函数定义
  • 函数必须指定返回类型,如果没有返回值,使用 void
 

sql

复制代码

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

6. 类和对象
  • 类用于创建对象,支持构造函数和析构函数。
 

csharp

复制代码

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. 继承和多态
  • 支持类继承和方法重写。
 

csharp

复制代码

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. 接口
  • 接口定义了一组方法规范。
 

csharp

复制代码

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

9. 泛型
  • 支持泛型定义,允许类型参数化。
 

csharp

复制代码

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 语句。
 

php

复制代码

try { // code that might throw an exception } catch (e: Exception) { // handle exception } finally { // clean up code }

11. 命名空间
  • 支持命名空间来组织代码。
 

csharp

复制代码

namespace MyNamespace { function foo() { // code } } MyNamespace.foo();

12. 访问修饰符
  • 支持 publicprivateprotected 访问控制。
 

csharp

复制代码

class MyClass { public function publicMethod() { // code } private function privateMethod() { // code } protected function protectedMethod() { // code } }

13. 静态成员
  • 支持静态方法和属性。
 

csharp

复制代码

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. 枚举
  • 支持枚举类型定义。
 

ini

复制代码

enum Color { RED, GREEN, BLUE } let myColor: Color = Color.RED;

15. 委托和事件
  • 如果适用,支持委托和事件的机制。
 

csharp

复制代码

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. 注释
  • 支持单行和多行注释。
 

arduino

复制代码

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

17. 模块化
  • 支持模块化编程,使用 import 和 export
 

arduino

复制代码

module MathModule { export function add(a: int, b: int): int { return a + b; } } import MathModule; let result = MathModule.add(5, 3);

18. 标准库

语法规范:

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

示例:

 

arduino

复制代码

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

19. 编译和运行时

编译过程:

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

运行时环境:

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

示例:

 

rust

复制代码

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

20. 安全性

内存安全:

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

类型安全:

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

示例:

 

csharp

复制代码

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

21. 性能特性

优化策略:

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

示例:

 

arduino

复制代码

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

22. 调试和测试

调试工具:

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

测试框架:

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

示例:

 

scss

复制代码

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

23. 文档和注释

注释规范:

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

文档生成:

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

示例:

 

arduino

复制代码

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

24. 国际化和本地化

字符串处理:

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

本地化处理:

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

示例:

 

ini

复制代码

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

25. 扩展性

插件和扩展机制:

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

示例:

 

c

复制代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值