Skip to content

V1.0.1

Pre-release
Pre-release

Choose a tag to compare

@weaweawe01 weaweawe01 released this 17 Oct 15:51
· 13 commits to main since this release

Go SpEL Parser

这是完整的 Spring Expression Language (SpEL) 解析器的 Go 语言版本,从 Java 原版转换而来。包含完整的词法分析和语法分析功能。
基于(spring-expression-6.2.11.jar)版本开发

安装

go get github.com/weaweawe01/ParserSpel/ast

使用案例

package main

import (
	"fmt"
	"github.com/weaweawe01/ParserSpel/ast"
)

func main() {
	parser := ast.NewSpelExpressionParser()
	// 测试普通表达式
	normalExpressions := []string{
		"{1,2,3,4}",
	}
	for i, expr := range normalExpressions {
		tokenizer := ast.NewTokenizer(expr)
		tokens, err := tokenizer.Process()
		if err != nil {
			fmt.Errorf("tokenization failed: %v", err)
			return
		}
		fmt.Println("词法序列Token:")
		for count, token := range tokens {
			fmt.Printf("[%d] %s\n", count, token)
		}
		fmt.Printf("\n=== 词法解析: %d ===", i+1)
		result, err := parser.ParseExpressionWithContext(expr, nil)
		if err != nil {
			fmt.Printf("❌ 解析错误: %v\n", err)
		} else {
			ast.PrintASTWithTitle(result.AST, "完整 AST 树形结构")
		}
	}
}

执行结果

root@hcss-ecs-5ed3:/tools/terst66# go run .
词法序列Token:
[0] [LCURLY({)](0,1)
[1] [LITERAL_INT:1](1,2)
[2] [COMMA(,)](2,3)
[3] [LITERAL_INT:2](3,4)
[4] [COMMA(,)](4,5)
[5] [LITERAL_INT:3](5,6)
[6] [COMMA(,)](6,7)
[7] [LITERAL_INT:4](7,8)
[8] [RCURLY(})](8,9)

=== 词法解析: 1 ===
=== 完整 AST 树形结构 ===
节点类型: InlineList, 表达式片段: '{1,2,3,4}'
  节点类型: Literal, 表达式片段: '1'
  节点类型: Literal, 表达式片段: '2'
  节点类型: Literal, 表达式片段: '3'
  节点类型: Literal, 表达式片段: '4'