考虑this源代码,该源代码在Scala中为术语语言实现了解析器。用于测试其功能的主要功能定义为:
def main(args: Array[String]): Unit = {
val stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in))
val tokens = new lexical.Scanner(stdin.readLine())
phrase(term)(tokens) match {
case Success(trees, _) =>
for (t <- path(trees))
println(t)
try {
print("Big step: ")
println(eval(trees))
} catch {
case TermIsStuck(t) => println("Stuck term: " + t)
}
case e =>
println(e)
}
}
我编写了以下测试:
package fos
import org.scalatest.FunSuite
class ArithmeticTest extends FunSuite {
test("testTerm") {
Arithmetic.term(new Arithmetic.lexical.Scanner("if iszero pred pred 2 then if iszero 0 then true else false else false")) match {
case Success(res,next) => assert(res == If(IsZero(Pred(Pred(Succ(Succ(Zero))))),If(IsZero(Zero),True,False),False))
case Failure(msg,next) => assert(false)
}
}
}
不幸的是,即使像上面的链接中那样混入StandardTokenParsers
,也无法识别成功和失败案例。我该如何运作?
答案 0 :(得分:1)
您需要CREATE OR REPLACE PROCEDURE sp_comms_update_stg (
ssms_key IN VARCHAR2,
spolicyNumber IN VARCHAR2,
sclientKey IN VARCHAR2,
sclientReference IN VARCHAR2,
sresult OUT SYS_REFCURSOR
)
IS
BEGIN
UPDATE stg_update_email
SET
sms_key := ssms_key,
policy_number := spolicyNumber,
client_key := sclientKey,
process_status := 'Processed'
WHERE client_reference = sclientReference;
INSERT INTO EVENTLOG VALUES(seq_eventlog.NEXTVAL, spolicyNumber , (select
to_date(sysdate) from dual),
to_char(sysdate,'HH24:MI:SS'), 101, null, 1, 'Updated stg_update_email',
'stg_update_email successfully updated', 'P', var_Client, null, null);
sresult:= true;
COMMIT;
EXCEPTION
WHEN OTHERS Then
Rollback;
sresult := false;
RAISE_APPLICATION_ERROR (-20000,'ERROR IN EXECUTING PROCEDURE
SP_UNDEL_UPD_STG - '|| chr(13)||chr(10) || UPPER(SQLERRM) ||
chr(13)||chr(10));
END;
和Arithmetic.Success
,就像您有Arithmetic.Failure
一样。或者,您可以Arithmetic.lexical.Scanner
。