V2EX r1nice
 r1nice 最近的时间轴更新
r1nice

r1nice

V2EX 第 604815 号会员,加入于 2022-12-05 13:50:32 +08:00
r1nice 最近回复了
2023-03-17 17:02:27 +08:00
回复了 r1nice 创建的主题 Kotlin Java /kotlin AST 构建相关,悬赏 200 求解,人已经麻了
@Zakl21 两种输入:json 和字符串,我手敲一个好了
selectMonsterByName(StringConstant("zombie")).getAttribute(AttributeConstant("Dex")).plus(IntParam("test")).divide(Constant(3))
获取名称为 zombie 的僵尸,如果存在就获取其僵尸属性(否则就 throw),返回(他的敏捷数值+输入的,key 为 test 的数值)/3 的数值
在 json 里的表达:

{
name : divide
left:{
name:plus
left:{
name:get_attribute
left:{
name:select_monster_by_name
left:{
name:string_constant
value:"zombie"
}
right:null
}
right:{
name:attribute_constant
value:Dex
}
}
right:{
name:int_param
value:"test"
}
}
right:{
name:int_constant
value:3
}
}
2023-03-17 16:51:30 +08:00
回复了 r1nice 创建的主题 Kotlin Java /kotlin AST 构建相关,悬赏 200 求解,人已经麻了
@wuych 不行,必须要进行序列化和反序列化,做到 ast 的永久化,否则这个系统搞不定任何事
2023-03-17 13:20:29 +08:00
回复了 r1nice 创建的主题 Kotlin Java /kotlin AST 构建相关,悬赏 200 求解,人已经麻了
@liuhan907 需求:让一个游戏的玩家可以通过 json 或者 string 字符串类型的输入,来使用受限制的符号自定义一个 function ,并能将这个 function 序列化和反序列化塞进 mysql 里
不能更换语言的原因纯粹是我这边时间和精力不足以及成本太高,我只会 java 和 kotlin ,而且项目的代码除了 ast 外已经基本搞定了,如果要直接推倒重来成本完全不可接受,只能硬刚
2023-03-16 23:33:05 +08:00
回复了 r1nice 创建的主题 Kotlin Java /kotlin AST 构建相关,悬赏 200 求解,人已经麻了
@iseki 新人,没怎么用过 V2EX ,不清楚怎么 po 代码,这里先放个 github 链接:https://github.com/RiniceSiberia/Co2Dice/tree/master/src/main/java/org/co2dice/mirai/ast

以下是文字版代码

interface AstNode <
O
//输出
> {
val name : String

fun operation(param : Map<String,Any>):O
//这个节点的运算方式,计算这个节点的运算结果

fun vacancy() : Boolean
//用来检查能否被插入一个新节点

abstract fun getChild() : List<AstNode<*>>
//获取所有子节点

fun dfs(find : () -> Boolean) : AstNode<*>? {
if (find()) {
return this
}
for (child in getChild()) {
val result = child.dfs(find)
if (result != null) {
return result
}
}
return null
}

}

abstract class LeafNode<O,V>() : AstNode<O> {
abstract var value : V

override fun vacancy(): Boolean {
return false
}

override fun getChild(): List<AstNode<*>> {
return emptyList()
}
}
abstract class BranchNode<T>() : AstNode<T> {

}

abstract class SingleChildNode<I,O> : BranchNode<O>() {
abstract var child : AstNode<I>

override fun vacancy(): Boolean {
return child !is PlaceholderNode
}

override fun getChild(): List<AstNode<I>> {
return listOf(child)
}

}
abstract class PairChildNode<LI,RI,O> : BranchNode<O>() {
abstract var left : AstNode<LI>
//左节点
abstract var right : AstNode<RI>
//右节点

override fun vacancy(): Boolean {
return (left is PlaceholderNode) || (right is PlaceholderNode)
}
override fun getChild(): List<AstNode<*>> {
return litOfNotNull(left,right)
}
abstract class ListChildNode<I,T>(
var childs: MutableList<AstNode<I>> = mutableListOf()
) : BranchNode<List<T>>() {

override fun getChild(): List<AstNode<I>> {
return childs
}

override fun vacancy(): Boolean {
return true
}

}
abstract class EqualsNode<T>(
override var left : AstNode<T>,
override var right : AstNode<T>,
) : PairChildNode<T, T, Boolean>() {


override fun operation(param : Map<String,Any>) : Boolean{
return left.operation(param) == right.operation(param)
}

override fun toString(): String {
return "=="
}
}
class NumberEqualsNode(
left : AstNode<Int> = NumberPlaceholderNode(),
right : AstNode<Int> = NumberPlaceholderNode(),
) : EqualsNode<Int>(left,right) {
override val name: String = Symbols.NUMBER_EQUALS.name
}
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2818 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 19ms UTC 13:37 PVG 21:37 LAX 06:37 JFK 09:37
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86