expression

package
v1.17.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 5, 2024 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

----------------------------------------------------------------

0. 词法分析,把所有词转换成 token(type, val)

括号

LBT   	/[(\[{]/
RBT   	/[)\]}]/

关键字

// KEYWORD  //

逻辑

OP    	/(&&|\|\|)/

条件

COND  	/(==|!=|>=|<=|>|<)/

变量

IDENT 	/[a-zA-Z_][\w]*/

VAL   NUM | BOOL | STRING

NUM   	/(?:\+|-)?\d+(?:\.\d+)?/
BOOL  	/(?:true|false)/
STRING	/('|")(.*?)(?:(?<!\\)|(?<=(?<!\\)(?:\\\\)+))(\1)/

空字符

DELIM		/\s*/

无法解析

ILLEGAL	/.+/

优先级 COND = OP > VAL > IDENT > LBT = RBT > (DELIM: 每次匹配前过滤掉空字符) > ILLEGAL

----------------------------------------------------------------
----------------------------------------------------------------
  1. 把分词进行解析,生成最终的词法数组 >> 可以转回表达式 ---------------------------------------------------------------- ----------------------------------------------------------------
  2. 把词法数组解析,转成语法树 >> 不可以转回表达式

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LexToExpr

func LexToExpr(tokens []*LexNode) (expr string)

LexToExpr 分词转表达式

Types

type AstNode

type AstNode struct {
	Type  token.Token `json:"type"`
	Value any         `json:"value"`
	Left  *AstNode    `json:"left"`  // sub left tree, 只有非 term 节点才有, term 节点为 nil
	Right *AstNode    `json:"right"` // sub right tree, 只有非 term 节点有, term 节点为 nil
}

AstNode 语法树节点

func AstParse

func AstParse(lexTokens []*LexNode) (tree *AstNode)

AstParse 把分词解析成语法树

type LexNode

type LexNode struct {
	Type    token.Token
	Value   any
	SubCond []*LexNode // 不为空,则为子表达式
	Len     int
	From    int
}

LexNode 分词节点

func LexParse

func LexParse(tokens []*LexNode) (lexTokens []*LexNode, err error)

LexParse 解析所有的分词

func TokensRead

func TokensRead(expr string) (tokens []*LexNode)

TokensRead 读取表达式所有分词

正常来说,返回值是个中间状态,一般不直接使用,需要调用 TokensParse 进行解析

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL