gpt4 book ai didi

xpath - 在XPath中访问注释和/或TRIVIA文件

转载 作者:行者123 更新时间:2023-12-03 16:18:47 25 4
gpt4 key购买 nike

我在使用XPath时遇到了一些麻烦。 (稍后我想将SonarQube上的表达式添加到xpath模式的规则中,以便我可以在那里创建自己的规则。但是SonarQube尚不需要)

我想创建一个规则,如果分析了一个项目并且在我的Java项目(例如myXPathTry.java)的注释(例如“ ERROR”)中写了一些特殊内容,则会引发异常。

我正在使用此SSLR Toolkit测试所有表达式。只需下载并执行。

用法很简单:在左侧添加您的代码,然后在框下方单击“解析源代码”。然后,在底部的框中​​添加您的xpath规则,最后单击“评估XPath”。结果应标出。如果单击右框上方的xml按钮,还可以查看为源代码自动创建的XML。

我的问题是:所有注释都保存在“不可访问的” TRIVIA路径中(如AST中所示)。我可以访问所有其他内容,并检查其中的值和参数,但不能检查TRIVIA的内容。 (下面添加了JavaCode,AST(抽象语法树)和XML。)

您知道我如何获得评论的方式吗?
谢谢你的帮助! :)

Already tested: 
neighter //*/comment() , nor //*/TOKEN/TRIVIA does have any effect.
//*/TOKEN works and has affect, but does not contain the needed information.


Java代码:

public class MyXPathTry{
public static void main(String[] args){
System.out.println("Just to have some code");
//This is a comment
/* This is a second comment */
/* This is a second comment with ERROR*/
}
}




在AST中,我单击了工具箱左侧的任何注释后,选择了蓝线(RWING,如果图像不可见)。默认情况下,未打开向下的路径。我自己打开了RWING和TOKEN子文件夹,只是向您展示了TRIVIA文件的含义)

Toolkit Auto-Created XML:
<compilationUnit tokenValue="public" tokenLine="1" tokenColumn="0">
<typeDeclaration tokenValue="public" tokenLine="1" tokenColumn="0">
<modifier tokenValue="public" tokenLine="1" tokenColumn="0">
<PUBLIC tokenValue="public" tokenLine="1" tokenColumn="0">
<TOKEN tokenValue="public" tokenLine="1" tokenColumn="0"/>
</PUBLIC>
</modifier>
<classDeclaration tokenValue="class" tokenLine="1" tokenColumn="7">
<CLASS tokenValue="class" tokenLine="1" tokenColumn="7">
<TOKEN tokenValue="class" tokenLine="1" tokenColumn="7"/>
</CLASS>
<IDENTIFIER tokenValue="MyXPathTry" tokenLine="1" tokenColumn="13">
<TOKEN tokenValue="MyXPathTry" tokenLine="1" tokenColumn="13"/>
</IDENTIFIER>
<classBody tokenValue="{" tokenLine="1" tokenColumn="23">
<LWING tokenValue="{" tokenLine="1" tokenColumn="23">
<TOKEN tokenValue="{" tokenLine="1" tokenColumn="23"/>
</LWING>
<classBodyDeclaration tokenValue="public" tokenLine="2" tokenColumn="4">
<modifier tokenValue="public" tokenLine="2" tokenColumn="4">
<PUBLIC tokenValue="public" tokenLine="2" tokenColumn="4">
<TOKEN tokenValue="public" tokenLine="2" tokenColumn="4"/>
</PUBLIC>
</modifier>
<modifier tokenValue="static" tokenLine="2" tokenColumn="11">
<STATIC tokenValue="static" tokenLine="2" tokenColumn="11">
<TOKEN tokenValue="static" tokenLine="2" tokenColumn="11"/>
</STATIC>
</modifier>
<memberDecl tokenValue="void" tokenLine="2" tokenColumn="18">
<VOID tokenValue="void" tokenLine="2" tokenColumn="18">
<TOKEN tokenValue="void" tokenLine="2" tokenColumn="18"/>
</VOID>
<IDENTIFIER tokenValue="main" tokenLine="2" tokenColumn="23">
<TOKEN tokenValue="main" tokenLine="2" tokenColumn="23"/>
</IDENTIFIER>
<voidMethodDeclaratorRest tokenValue="(" tokenLine="2" tokenColumn="27">
<formalParameters tokenValue="(" tokenLine="2" tokenColumn="27">
<LPAR tokenValue="(" tokenLine="2" tokenColumn="27">
<TOKEN tokenValue="(" tokenLine="2" tokenColumn="27"/>
</LPAR>
<formalParameterDecls tokenValue="String" tokenLine="2" tokenColumn="28">
<type tokenValue="String" tokenLine="2" tokenColumn="28">
<classType tokenValue="String" tokenLine="2" tokenColumn="28">
<IDENTIFIER tokenValue="String" tokenLine="2" tokenColumn="28">
<TOKEN tokenValue="String" tokenLine="2" tokenColumn="28"/>
</IDENTIFIER>
</classType>
<dim tokenValue="[" tokenLine="2" tokenColumn="34">
<LBRK tokenValue="[" tokenLine="2" tokenColumn="34">
<TOKEN tokenValue="[" tokenLine="2" tokenColumn="34"/>
</LBRK>
<RBRK tokenValue="]" tokenLine="2" tokenColumn="35">
<TOKEN tokenValue="]" tokenLine="2" tokenColumn="35"/>
</RBRK>
</dim>
</type>
<formalParametersDeclsRest tokenValue="args" tokenLine="2" tokenColumn="37">
<variableDeclaratorId tokenValue="args" tokenLine="2" tokenColumn="37">
<IDENTIFIER tokenValue="args" tokenLine="2" tokenColumn="37">
<TOKEN tokenValue="args" tokenLine="2" tokenColumn="37"/>
</IDENTIFIER>
</variableDeclaratorId>
</formalParametersDeclsRest>
</formalParameterDecls>
<RPAR tokenValue=")" tokenLine="2" tokenColumn="41">
<TOKEN tokenValue=")" tokenLine="2" tokenColumn="41"/>
</RPAR>
</formalParameters>
<methodBody tokenValue="{" tokenLine="2" tokenColumn="42">
<block tokenValue="{" tokenLine="2" tokenColumn="42">
<LWING tokenValue="{" tokenLine="2" tokenColumn="42">
<TOKEN tokenValue="{" tokenLine="2" tokenColumn="42"/>
</LWING>
<blockStatements tokenValue="System" tokenLine="3" tokenColumn="1">
<blockStatement tokenValue="System" tokenLine="3" tokenColumn="1">
<statement tokenValue="System" tokenLine="3" tokenColumn="1">
<expressionStatement tokenValue="System" tokenLine="3" tokenColumn="1">
<statementExpression tokenValue="System" tokenLine="3" tokenColumn="1">
<expression tokenValue="System" tokenLine="3" tokenColumn="1">
<primary tokenValue="System" tokenLine="3" tokenColumn="1">
<qualifiedIdentifier tokenValue="System" tokenLine="3" tokenColumn="1">
<IDENTIFIER tokenValue="System" tokenLine="3" tokenColumn="1">
<TOKEN tokenValue="System" tokenLine="3" tokenColumn="1"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="7">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="7"/>
</DOT>
<IDENTIFIER tokenValue="out" tokenLine="3" tokenColumn="8">
<TOKEN tokenValue="out" tokenLine="3" tokenColumn="8"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="11">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="11"/>
</DOT>
<IDENTIFIER tokenValue="println" tokenLine="3" tokenColumn="12">
<TOKEN tokenValue="println" tokenLine="3" tokenColumn="12"/>
</IDENTIFIER>
</qualifiedIdentifier>
<identifierSuffix tokenValue="(" tokenLine="3" tokenColumn="19">
<arguments tokenValue="(" tokenLine="3" tokenColumn="19">
<LPAR tokenValue="(" tokenLine="3" tokenColumn="19">
<TOKEN tokenValue="(" tokenLine="3" tokenColumn="19"/>
</LPAR>
<expression tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<primary tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<literal tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<LITERAL tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<TOKEN tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"/>
</LITERAL>
</literal>
</primary>
</expression>
<RPAR tokenValue=")" tokenLine="3" tokenColumn="44">
<TOKEN tokenValue=")" tokenLine="3" tokenColumn="44"/>
</RPAR>
</arguments>
</identifierSuffix>
</primary>
</expression>
</statementExpression>
<SEMI tokenValue=";" tokenLine="3" tokenColumn="45">
<TOKEN tokenValue=";" tokenLine="3" tokenColumn="45"/>
</SEMI>
</expressionStatement>
</statement>
</blockStatement>
</blockStatements>
<RWING tokenValue="}" tokenLine="7" tokenColumn="4">
<TOKEN tokenValue="}" tokenLine="7" tokenColumn="4"/>
</RWING>
</block>
</methodBody>
</voidMethodDeclaratorRest>
</memberDecl>
</classBodyDeclaration>
<RWING tokenValue="}" tokenLine="8" tokenColumn="0">
<TOKEN tokenValue="}" tokenLine="8" tokenColumn="0"/>
</RWING>
</classBody>
</classDeclaration>
</typeDeclaration>
<EOF tokenValue="" tokenLine="8" tokenColumn="1"/>
</compilationUnit>


最佳答案

这是不可能的。为了您的信息,将放弃使用XPath编写自定义规则的功能,而推荐使用Java编写它们。

关于xpath - 在XPath中访问注释和/或TRIVIA文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com