2009-07-19 46 views
2

我使用称为JS的嵌入式语言进行编码。使用严重受限的解释语言

我希望能够以任意顺序调用三个函数。 (ABC,ACB,BAC,BCA,CBA,CAB)

诀窍?该语言没有用户定义的功能。

它确实有一个条件和循环构造。

我想我有三种选择。

  1. 重复一大堆代码。
  2. 编写一个预处理程序(这将创建所有重复的代码)。
  3. 做三次循环,使用数组来控制在循环的每次通过时调用哪个功能。

我讨厌#1。重复的代码是讨厌的。我如何改变任何东西而不用搞砸?

我猜#2是好的。至少我没有在源代码中重复的代码。但是我的输出代码就是我要调试的东西,而且我想知道我是否想要偏离它。从好的一面来说,我可以在语言中添加一些糖。

我认为我最好的选择是#3。

还有其他想法吗?没有转到。没有功能。没有现有的预处理器。

#3有趣的事情是,它本质上是臭名昭着的/开关噩梦。

+1

我对这种语言有点好奇,但在网上搜索JS的过程中发现了大量的Javascript,并没有多少嵌入式语言。你有没有一个好的起点? – 2009-07-19 00:56:59

+3

http://www.reaper.fm/sdk/js/js.php – Nosredna 2009-07-19 01:03:02

+0

我希望能够以任何顺序调用位破碎机,低通滤波器和wavehaper音频效果(例如)。 – Nosredna 2009-07-19 01:05:18

回答

3

也许某种突变状态机的,即:

int CODEWORD=0x123; 

while (CODEWORD) 
{ 
    switch(CODEWORD&15) 
    { 
    case 1: 
     /// case 1 
     break; 
    case 2: 
     /// case 2 
     break; 
    case 3: 
     //// case 3 
     break; 
    } 
    CODEWORD=CODEWORD>>4; 
} 

干燥,无预处理器,没有数组。 for/switch似乎有些不可避免。

+0

对。没有开关。所以我必须用有条件的,这是一个三元组来伪造。我喜欢它避免阵列。 – Nosredna 2009-07-19 00:55:46

+0

刚刚编辑;转移字节不是小数点。 – 2009-07-19 01:04:08

+0

此外,请注意,此代码将执行3,然后2,然后1! – 2009-07-19 01:04:52

3

您可能可以使用C预处理器而不是编写自己的。这至少会让你试试看它是否可行。

+0

是的,我可以做到这一点。阻止我的是嵌入式语言可以随时更改,这非常酷。一个预处理器可能会混淆这个流程,但可能确实有助于保持代码的正常。 – Nosredna 2009-07-19 00:53:56

1

技术上最好的解决方案(假设你有访问代码或开发商)是修改JS语言做你真正需要的。

如果做不到这一点,最好的解决方案取决于你有没有解释方面的问题:

  1. 是“功能”递归?
  2. 有没有函数参数?
  3. 你需要(你可能需要)JS中没有提供的其他控制结构吗?
  4. 函数调用顺序依赖于运行时参数吗?
  5. 您是否足够熟练和有信心设计和实现符合您当前和预计要求的预处理语言?
  6. 是否正在实施一个预处理器来长期保存您/同事的时间?

如果答案为5 够了别人的都是“是”,那么你的选择#2是正确的答案。否则......像#1或#3这样的丑陋解决方案实际上可能是一个更好的主意。

编辑:如果您没有源代码访问权限和开发团队没有响应您的需求,请考虑寻找开源替代品。

+0

好问题。 1.不是。2.显然,由于没有用户函数,所以它们将访问全局变量和内存。 3.不需要,但愿意。是的。用户可以随时更改。 5.是的。不确定。这就是我炖过的东西。 – Nosredna 2009-07-19 01:15:04

+0

修改语言不切合实际。源经常关闭并且可执行更改。还有一个我不得不挂钩的实时调试器。也许我应该给贾斯汀弗兰克尔发邮件并告诉他我想要一份工作。 :-) – Nosredna 2009-07-19 01:19:30

+0

或者寻找一个开源的替代品。 – 2009-11-16 00:04:32