Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaCC-XPath解析器_Java_Xpath_Javacc - Fatal编程技术网

JavaCC-XPath解析器

JavaCC-XPath解析器,java,xpath,javacc,Java,Xpath,Javacc,我需要创建一个(非常)简单的XPath表达式解析器。我正试图使用JavaCC实现这个目的。我对JavaCC完全陌生(尽管我们在学校学过Flex&Bison),因此我试图通过一次添加一小段功能逐步构建JJ脚本 到目前为止,我掌握了以下语法: XPATHEXPRESSION ::= ("/" <STEP>)+ STEP ::= <AXIS_NAME> ":" <NODE_TEST> ( "[" <EXPRESSION> "]" )* EXPRESSIO

我需要创建一个(非常)简单的XPath表达式解析器。我正试图使用JavaCC实现这个目的。我对JavaCC完全陌生(尽管我们在学校学过Flex&Bison),因此我试图通过一次添加一小段功能逐步构建JJ脚本

到目前为止,我掌握了以下语法:

XPATHEXPRESSION ::= ("/" <STEP>)+
STEP ::= <AXIS_NAME> ":" <NODE_TEST> ( "[" <EXPRESSION> "]" )*
EXPRESSION ::= <XPATHEXPRESSION> "=" """ <IDENTIFIER> """
产生以下输出(在调试模式下运行JavaCC时):

调用:XPathExpr
已消费代币:
呼叫:步骤
已消费代币:
已消费代币:
已消费代币:
返回:步骤
已消费代币:
呼叫:步骤
已消费代币:
已消费代币:
已消费代币:
已消费代币:
呼叫:表达式
电话:XPathExpr
已消费代币:
呼叫:步骤
已消费代币:
已消费代币:
已消费代币:
返回:步骤
返回:XPathExpr
返回:表达式
返回:步骤
返回:XPathExpr
线程“main”cz.me.generator.parser.ParseException中出现异常:在第1行第42列遇到“=”。
我期待的是:
"/" ...
"[" ...
位于cz.me.generator.parser.XPathParser.GenerateParserException(XPathParser.java:270)
位于cz.me.generator.parser.XPathParser.jj_消费_令牌(XPathParser.java:207)
位于cz.me.generator.parser.XPathParser.XPathExpr(XPathParser.java:65)
位于cz.me.generator.parser.XPathParser.Expression(XPathParser.java:32)
位于cz.me.generator.parser.XPathParser.Step(XPathParser.java:100)
位于cz.me.generator.parser.XPathParser.XPathExpr(XPathParser.java:54)
位于cz.me.generator.parser.XPathParser.parse(XPathParser.java:22)
位于cz.me.generator.Main.Main(Main.java:17)
我尝试了一些变体,看看JavaCC是否在递归方面没有问题,但问题似乎在别处

有什么问题吗?

问题是XPathExpr中的
。去掉它。添加一个产品

void Start() :
{ }
{
  XPathExpr()
  < EOF >
}
void Start():
{ }
{
XPathExpr()

}

然后重写
parse
以使用Start。

我明白了。我从教程中的一个框架脚本开始,然后迭代地扩展它。最后我完全忘记了EOF令牌。谢谢你的帮助。
XPathExpr expr = XPathParser.parse("/self:house/child:window[/child:material = \"glass\"]");
System.out.println(expr);
 Call:   XPathExpr
  Consumed token: <"/" at line 1 column 1>
  Call:   Step
    Consumed token: <<IDENTIFIER>: "self" at line 1 column 2>
    Consumed token: <":" at line 1 column 6>
    Consumed token: <<IDENTIFIER>: "house" at line 1 column 7>
  Return: Step
  Consumed token: <"/" at line 1 column 12>
  Call:   Step
    Consumed token: <<IDENTIFIER>: "child" at line 1 column 13>
    Consumed token: <":" at line 1 column 18>
    Consumed token: <<IDENTIFIER>: "window" at line 1 column 19>
    Consumed token: <"[" at line 1 column 25>
    Call:   Expression
      Call:   XPathExpr
        Consumed token: <"/" at line 1 column 26>
        Call:   Step
          Consumed token: <<IDENTIFIER>: "child" at line 1 column 27>
          Consumed token: <":" at line 1 column 32>
          Consumed token: <<IDENTIFIER>: "material" at line 1 column 33>
        Return: Step
      Return: XPathExpr
    Return: Expression
  Return: Step
Return: XPathExpr
Exception in thread "main" cz.me.generator.parser.ParseException: Encountered " "=" "= "" at line 1, column 42.
Was expecting one of:
    <EOF> 
    "/" ...
    "[" ...

    at cz.me.generator.parser.XPathParser.generateParseException(XPathParser.java:270)
    at cz.me.generator.parser.XPathParser.jj_consume_token(XPathParser.java:207)
    at cz.me.generator.parser.XPathParser.XPathExpr(XPathParser.java:65)
    at cz.me.generator.parser.XPathParser.Expression(XPathParser.java:32)
    at cz.me.generator.parser.XPathParser.Step(XPathParser.java:100)
    at cz.me.generator.parser.XPathParser.XPathExpr(XPathParser.java:54)
    at cz.me.generator.parser.XPathParser.parse(XPathParser.java:22)
    at cz.me.generator.Main.main(Main.java:17)
void Start() :
{ }
{
  XPathExpr()
  < EOF >
}