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