我有以下类将代表不同类型的数据:
class A { ... }
class S { ... }
class F { ... }
然后我构造输入数组:
var input = [new F(), new A([11,22]), new S([33,44]), new F([55,66]), new A([77,88])]
然后我为 PEG.js 构建了一个语法:
start = (F A*)+
A = 'a' / S
S = 's'+ (A|F)
F = 'f'
我知道我可以使用带有字符串作为输入的 PEG.js(例如fasfa)。但我看不出有办法使用我自己的令牌输入流。有可能吗?
更新
最初的问题可以概括为“我需要一种方法来一次构建一个工具栏”。目前我有 3 种类型的块:Append、Squash 和 Final。
Append - just appends current buttons into the resulting array
Squash - behaves like Append only if next block is Append (several
Squash block melded into one)
Final - just like Append, but if there is something next to it,
it will start from the empty resulting array
几个例子:
Append([11,22])
[11,22]
Append([11,22])
Squash([33,44])
[11,22]
Append([11,22])
Squash([33,44])
Append([55,66])
[11,22,33,44,55,66]
Append([11,22])
Squash([33,44])
Final([55,66])
[11,22,33,44,55,66]
Append([11,22])
Squash([33,44])
Final([55,66])
Append([77,88])
[77,88]
我认为可以将这个问题视为某种语言问题。那就是我有一个令牌输入流,我需要将其转换为其他东西(例如某个对象)。