我们正在尝试破译一些规则语法,但不确定其来源。
这是一个例子:
(CARS->TYPE='C').and.(CARS->CD_CODE<>'').and.('|'+INVOICE->TYPE+'|'$'|AAA|').and.('|'+SUBSTR(INVOICE->TYPE,1,2)+'|'$'|11|')
具体来说,我们试图理解|
和$
。任何人都可以让我知道他们是否看到了与源语言相似的内容或对|
and的正确解释$
吗?
我们正在尝试破译一些规则语法,但不确定其来源。
这是一个例子:
(CARS->TYPE='C').and.(CARS->CD_CODE<>'').and.('|'+INVOICE->TYPE+'|'$'|AAA|').and.('|'+SUBSTR(INVOICE->TYPE,1,2)+'|'$'|11|')
具体来说,我们试图理解|
和$
。任何人都可以让我知道他们是否看到了与源语言相似的内容或对|
and的正确解释$
吗?
从它的语法我们可以看出它是一种“现代”语言。记住“现代”好吗;)
substr
.and.
->
与 cobol 和汇编语言相比,它们非常现代。
(CARS->TYPE='C').and.(CARS->CD_CODE<>'').and.('|'+INVOICE->TYPE+'|'$'|AAA|').and.(' |'+SUBSTR(INVOICE->TYPE,1,2)+'|'$'|11|')
伪代码将是:
(if car type is 'C'
and
if car cd_code is not empty
and
if invoice type is 'AAA'
and
if invoice type first 2 letters are '11')
then return true
我对使用 $ 的猜测是:
= and <> are only when compare against a character
$ when compare array of character, i.e. strings.
(我不知道输出是什么,因为它将整个发票类型与 AAA 进行比较,甚至前两个字母为 11。也许您在提交之前编辑了代码?)
Fortran 90可能是一个猜测,但甚至可能是DBase III。
DBase 链接: http: //lynnbob.com/bob/articles/DBASEIIIPlusLevel2.htm
Fortran 链接: http ://www.ews.uiuc.edu/~mrgates2/docs/fortran.html
对于 DBASE 关于管道...
如果传递参数,它们必须用 | 分隔。| (管道)。即使没有传递参数,管道 || 也是必需的。如果您传递参数,它们将在 || 中分隔。
这不是 BASIC、Pascal、C、Java、perl、Python、COBOL 或 FORTRAN,我可以从这些语言的经验中告诉你很多。提及您正在使用的规则引擎可能会有所帮助。
正在执行的操作看起来很像匹配操作。
'|' 看起来像管道字符的字符串文字 | ,并且考虑到上下文,它可能被用作类似 CSV 的平面文件格式数据库中的分隔符。例如,明文可能类似于 |INVOICETYPE|something|AAA|
但是,无法帮助您使用 $ 运算符。这可能是变量替换或匹配任何操作,甚至是连接器。
我的猜测:Fortran。
它现在是一种相当复杂的语言。我不相信它有一个->
运营商,但它似乎有=>
。也许这是您的代码片段中的供应商扩展。
支持 Fortran 的证据是.and.
运算符。
看起来像 FORTRAN 语言。虽然->
不是标准运算符。|
只是一个字符串(看起来不像运算符),但肯定$
看起来像一个运算符,也许是用于指定字符串格式的东西?推断此 cform 始终出现在字符串组之间的事实。