0
(단순한) XPath 구문 분석기 용 JavaCC 스크립트를 작성하려고하는데 개별 단계를 구문 분석하는 데 문제가 있습니다. 나는 다음과 같은 스크립트 조각으로 변형 한JavaCC - XPATH 표현식의 단계를 구문 분석합니다.
Step ::= (AxisName "::")? NodeTest ("[" Predicate "]")*
:
Step Step() :
{
Token t;
Step step;
Axis axis;
NodeTest nodeTest;
Expression predicate;
}
{
{ axis = Axis.child; }
(
t = <IDENTIFIER>
{ axis = Axis.valueOf(t.image); }
<COLON>
<COLON>
)?
t = <IDENTIFIER>
{ nodeTest = new NodeNameTest(t.image); }
{ step = new Step(axis, nodeTest); }
(
<OPEN_PAR>
predicate = Expression()
{ step.addPredicate(predicate); }
<CLOSE_PAR>
)*
{ return step; }
}
이,하지만 작동하지 않습니다
문법의 내 생각이있다.
p
는 다음과 같은 오류가 발생합니다 :
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant cz.dusanrychnovsky.generator.expression.Axis.p
at java.lang.Enum.valueOf(Unknown Source)
at cz.dusanrychnovsky.generator.expression.Axis.valueOf(Axis.java:3)
at cz.dusanrychnovsky.generator.parser.XPathParser.Step(XPathParser.java:123)
at cz.dusanrychnovsky.generator.parser.XPathParser.RelativeLocationPath(XPathParser.java:83)
at cz.dusanrychnovsky.generator.parser.XPathParser.AbsoluteLocationPath(XPathParser.java:66)
at cz.dusanrychnovsky.generator.parser.XPathParser.Start(XPathParser.java:23)
at cz.dusanrychnovsky.generator.parser.XPathParser.parse(XPathParser.java:16)
at cz.dusanrychnovsky.generator.Main.main(Main.java:24)
내가 무슨 일하는 것은조차없는 콜론 불구 축 분기를 취하도록 파서 입력에 식별자를보고 있다는 것을 생각을 다음과 같은 표현을 감안할 때 파서가 그 당시에 알 수없는 것을 따를 것이다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 스텝 룰의 lookahead 값을 어떻게 든 증가시켜야합니까? 그렇다면 정확히 어떻게할까요? 또는 어떻게 든 규칙을 다시 작성해야합니까?