我正在为Java 6 *1开发变换器,它执行一种部分评估,但为了简单起见,我们考虑Java程序的抽象语法树解释.
如何Thread通过解释程序模拟行为?
目前,我想到了以下几点:
AstInterpreter应该实现java.lang.Runnable.它还应该重写java.lang.Thread(或其子类)的每个new-instance-expression,用新的AstInterpreter实例替换Thread's target(java.lang.Runnable):
编辑:提供更复杂的示例.
编辑2:备注1.
目标计划:
class PrintDemo {
public void printCount(){
try {
for(int i = 5; i > 0; i--) {
System.out.println("Counter --- " + i );
}
} catch (Exception e) {
System.out.println("Thread interrupted.");
}
}
}
class ThreadDemo extends Thread {
private Thread t;
private String threadName;
PrintDemo PD;
ThreadDemo( String name, PrintDemo …Run Code Online (Sandbox Code Playgroud) java multithreading interpreter bytecode abstract-syntax-tree
我正在研究Java 6 *1的源到源转换器.
我需要保持负面信息和正面信息,因此我必须为变压器实施小约束系统.该约束系统是受限制的种类可被定义为下面的CNF式:
(v1 == c1 /\ v2 == c2 ... vn == cn) /\
((w1,1 != d1,1 \/ w1,2 !== d1,2 ... w1,k != d1,k) /\
(w2,1 != d2,1 \/ ...) /\ ...
(wm,1 != dm,1 \/ ... \/ wm,k != dm,k))
其中vi == ci是等式约束(取代,变量赋值),
wj != dj,l是不平等的约束,
vi, wj,l是变量,
ci, dj,l是常量(文字).
常量类型是Java原始类型和映射到整数的引用类型.常量也是任意类似AST的结构(表示部分计算的表达式,可能包含(元)变量).
约束系统的工作原理如下:
当变换器到达条件(例如if(x == …
java constraints constraint-programming constraint-satisfaction
我正在为Prolog中的proto文件实现Google Protobuf编译器,以生成Prolog程序.Prolog是SWI-Prolog.
我正在将EBNF定义翻译成DCG,并遇到了一些问题:
我必须处理[ ... ]和{ ... }EBNF构造 - 意思 optional(可执行零或一次)和repeatative(可执行任意次);
我必须使用DCG的构造将回调插入到DCG代码中以实现编译器功能的一部分(语法切换/导入/等){ ... },这允许在DCG规则内的Prolog语法中实现目标.
我正在申请optional和repeatative元谓词:$$rep/1,$$opt/1:
EBNF
decimals = decimalDigit { decimalDigit }
exponent = ( "e" | "E" ) [ "+" | "-" ] decimals
DCG
decimals --> decimalDigit, '$$rep'( decimalDigit ).
exponent --> ( "e"; "E" ), '$$opt'( "+"; "-" ), decimals.
'$$rep'( Goal …Run Code Online (Sandbox Code Playgroud)