使用F#解析AST来构建解释器的最佳方法是什么?有很多F#例子用于简单的语法(基本的算术运算),但我似乎找不到任何具有更大范围功能的语言.
受歧视的工会看起来非常有用,但您如何构建具有大量选项的工会呢?是否更好地在其他地方定义类型(例如加法,减法,条件,控制流)并将它们作为联合中的预定义类型组合在一起?
或者我错过了一些更有效的口译员写作方式?对每种类型的eval函数更有效,或者使用monad?
提前致谢
我有一个数字列表,表示由另一个程序生成的矩阵或数组的平坦输出,我知道原始数组的尺寸,并希望将数字读回列表列表或NumPy矩阵.原始数组中可能有两个以上的维度.
例如
data = [0, 2, 7, 6, 3, 1, 4, 5]
shape = (2,4)
print some_func(data, shape)
Run Code Online (Sandbox Code Playgroud)
会产生:
[[0,2,7,6],[3,1,4,5]]
提前干杯
使用Outlook API,可以通过在MailItem实例上设置VotingOpions属性来发送带有轮询的电子邮件。是否可以通过任何方式对Exchange Web服务执行相同操作?
我可以使用all_arguments和all_procedures列出任何给定包中的过程和函数,并使用DBMS_METADATA我可以提取该包的DDL.是否有一种简单的方法(除了大量的instring和substring调用之外)为包中的每个单独的代码块分别获取过程或函数源代码.
像这样的东西:
所有者| 包名| 对象名称| 超载| 参数| 资源
显然使用substring和instring会出现重载函数的问题.
All_arguments有subprogram_id字段,根据它上面非常稀疏的文档看起来它确实唯一地引用了它与包中相关的程序,但似乎没有任何使用它的东西.
提前干杯
我知道在C语言中,逻辑运算符一次被评估一次,因此:
false && really_expensive_function()
Run Code Online (Sandbox Code Playgroud)
是不会导致函数被调用(我不记得这个CS名称).在PL/SQL中是否也会发生相同的情况,或者我是否需要将IF部分分解为单独的块?
我要回到一个旧的项目,在那里我为Essence添加了预处理器功能,我意识到我之前编写域特定语言和相关词法分析器/解析器的解决方案是过度的.
相反,我只需要能够将动态语言代码嵌入到文件中,在运行时隔离它,eval并插入结果.换句话说,非常类似于将动态代码插入HTML的PHP模型.我宁愿不使用PHP,因为Python作为更大项目(IronPython或Jython)的一部分更容易分发
所以问题是,如何最好地实现以下内容:
<code>Python goes here</code>
Lots of essence <code>Python</code> prime code goes here
Run Code Online (Sandbox Code Playgroud)
我不想改变Essence文件的结构(如果我删除所有代码块,剩下的一切应该能够在语法上正确.它需要能够插入文本代替像PHP这样的代码块.
最后安全方面我并不担心代码注入,因为用户自己选择要执行的文件虽然如果一个模型比另一个模型有安全优势而没有额外的成本显然是好的.
提前干杯