标签: coldfusion

一旦语法完成,走ANTLR v4树的最佳方法是什么?

目标

我正在开发一个为Coldfusion CFscript创建Varscoper的项目.基本上,这意味着检查源代码文件以确保开发人员正确地使用var他们的变量.

在使用ANTLR V4几天后,我有一个语法,在GUI视图中生成一个非常好的解析树.现在,使用该树,我需要一种方法来以编程方式在节点上爬行和寻找变量声明,并确保如果它们在函数内部,则它们具有适当的范围.如果可能的话,我宁愿不在语法文件中这样做,因为这需要将语言的定义与此特定任务混合.

我试过的

我最近的尝试是使用ParserRuleContext并尝试通过它的children通过getPayload().在检查了类之后,getPayLoad()我会有一个ParserRuleContext对象或一个Token对象.不幸的是,使用它我永远无法找到获取特定节点的实际规则类型的方法,只有它包含文本.每个节点的规则类型都是必需的,因为该文本节点是否是被忽略的右手表达式,变量赋值或函数声明都很重要.

问题

  1. 我是ANTLR的新手,这是正确的方法,还是有更好的方法来遍历树?

这是我的示例java代码:

Cfscript.java

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.Trees;

public class Cfscript {
    public static void main(String[] args) throws Exception {
        ANTLRInputStream input = new ANTLRFileStream(args[0]);
        CfscriptLexer lexer = new CfscriptLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        CfscriptParser parser = new CfscriptParser(tokens);
        parser.setBuildParseTree(true);
        ParserRuleContext tree = parser.component();
        tree.inspect(parser); // show in gui
        /*
            Recursively go though tree finding function declarations and …
Run Code Online (Sandbox Code Playgroud)

coldfusion antlr antlr4

32
推荐指数
1
解决办法
2万
查看次数

在不同的TFS分支上工作时会丢失EF Code First Migration吗?

我们正在使用TFS并为我们的Dev提供不同的分支.

  1. 在分支A中,我们进行了迁移以更改列大小

  2. 在分支B中,我们进行了迁移以添加新表.这个分支不知道分支A修改!!

  3. 两个修改都合并到主分支.

当我执行更新数据库时,它执行2迁移,但最后告诉我有待更改.如果我执行Add-Migration,它将创建与第一次迁移相同的(在分支A中).

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.

是因为我上一次迁移的属性Target de IMigrationMetadata的内容中缺少某些东西,因为它不知道第一次迁移?

是否可以处理不同TFS分支中的迁移?

.net coldfusion entity-framework ef-code-first ef-migrations

31
推荐指数
1
解决办法
7439
查看次数

如何在ColdFusion中的字符串中写入换行符?

目前我通过以下两种方法之一将字符串换成新行:

<cfset someStr="This is line 1" & Chr(10) & "This is line 2" & Chr(10) & "This is line 3" />
Run Code Online (Sandbox Code Playgroud)

要么

<cfset NL=Chr(10) />
<cfset someStr="This is line 1#NL#This is line 2#NL#This is line 3" />
Run Code Online (Sandbox Code Playgroud)

还有更像Java/C++的方式吗?更像是这样我的意思是:

<cfset someStr="This is line 1\nThis is line 2\nThis is line 3" />
Run Code Online (Sandbox Code Playgroud)

syntax coldfusion newline

29
推荐指数
4
解决办法
4万
查看次数

如何连接两个字符串并将它们存储到相同的结构键中

我正在使用Coldfusion.我想将两个字符串连接到相同的结构键中,但我不断收到"无法将x转换为布尔值"的错误.

例如:

<cfset myStruct.string1 = nodes[1].string1.XmlText>
<cfset mystruct.string2 = nodes[1].string2.XmlText>
Run Code Online (Sandbox Code Playgroud)

以下都不起作用

<cfset myStruct.concatendatedSring = nodes[1].string1.XmlText AND nodes[1].string2.XmlText>
<cfset myStruct.concatendatedSring = myStruct.string1 AND myStruct.string2>
Run Code Online (Sandbox Code Playgroud)

为什么两种方法都无效?

string coldfusion struct

28
推荐指数
3
解决办法
7万
查看次数

为什么ColdFusion中0.06 + 0.01 = 0.07?

为什么ColdFusion中的数学运算似乎不受浮点数学问题的影响?拿代码:

result = 0.06 + 0.01;

writedump(result);
writedump(result.getClass().getName());
Run Code Online (Sandbox Code Playgroud)

哪个输出

0.07

java.lang.Double中

然而,相当的Java代码产生了我在添加两个双精度时所期望的:

public static void main(String[] args) {
    double a = 0.01d;
    double b = 0.06d;

    System.out.println(a + b); //0.06999999999999999
}
Run Code Online (Sandbox Code Playgroud)

这是我期望从ColdFusion看到的,因为浮动数学的现实(http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).

ColdFusion在幕后做了一些"魔术"还是我在这里看到一个孤立的异常?

java coldfusion floating-point-precision cfml

28
推荐指数
1
解决办法
1315
查看次数

如何在cfscript标签内部进行cfdump?

为了调试我想将某些变量转储到我的网页上.我怎么能从cfscript标签内做到这一点?

我尝试了以下但它不起作用:

<cfscript>
  ...
  <cfif cgi.REMOTE_ADDR eq "IP">
    <cfdump var="#var1#"><br/>
  </cfif>
  ...
</cfscript>
Run Code Online (Sandbox Code Playgroud)

关于可以做什么的任何线索?

coldfusion openbd railo cfml

27
推荐指数
3
解决办法
3万
查看次数

使用CF-ORM在ColdFusion 9中需要注意的事项

您在使用CF-ORM(Hibernate)的ColdFusion 9中观察到的一些内容应该注意什么?

coldfusion orm coldfusion-9

27
推荐指数
2
解决办法
9987
查看次数

cfqueryparam与ColdFusion中的like运算符

我的任务是经历一些最近遭受过相当讨厌的SQL注入攻击的ColdFusion站点.基本上我的工作涉及向<cfqueryparam所有内联sql 添加>标签.在大多数情况下,我已经把它弄下来了,但有人能告诉我如何使用cfqueryparam与LIKE运算符?

如果我的查询如下所示:

select * from Foo where name like '%Bob%'
Run Code Online (Sandbox Code Playgroud)

我的<cfqueryparam>标签应该是什么样的?

coldfusion openbd railo cfml

25
推荐指数
1
解决办法
8476
查看次数

如何将数字的字符串表示形式转换为coldfusion中的数字?

我希望能够将字符串数字(如"1,427.76")转换为coldfusion中的数字,但逗号会使其失败.除了必须删除逗号之外,还有一种简单的方法吗?

<cfset string = "1,427.75">

<cfset number = string * 100>
Run Code Online (Sandbox Code Playgroud)

尝试对其执行数学运算时发生错误.如果删除逗号它工作正常但我从数据库计算得到逗号.

coldfusion cfml

25
推荐指数
2
解决办法
5万
查看次数

Keytool未被识别为内部或外部命令

我试图使用本文中的说明发现Java Runtime中的受信任权限列表.当我输入以下命令时:

C:\ColdFusion8\runtime\jre\lib>keytool -list -storepass changeit -noprompt -keystore
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

'keytool'不被识别为内部或外部命令,可操作程序或批处理文件.

我检查了包含我的keytool可执行文件的目录是否在路径中.(在我的Windows 7机器上,它在C:\Program Files (x86)\Java\jre6\bin)尽管如此,命令行将无法识别该keytool命令.

我假设doc中提到了两个单独的命令:

  1. C:\CFusionMX\runtime\jre\lib>keytool -list -storepass changeit -noprompt -keystore

  2. C:\CFusionMX\runtime\jre\lib\security\cacerts

编辑:

那么我可以使用以下过程而不是答案中提到的复杂步骤吗?

  1. 当我将WSDL打开到浏览器中时,我看到了Lock图标,当我点击它时会打开一个"Certificate"窗口
  2. 然后我点击"安装证书"选项

  3. 打开证书导入向导窗口,我单击Next我看到两个选项

    • a)根据证书类型自动选择证书存储(自动选择此选项)
    • b)将所有证书放在以下商店中

我决定选择选项(b),但我很困惑我应该选择哪个证书库.

java coldfusion keytool

24
推荐指数
3
解决办法
10万
查看次数