javacc를 처음 사용했습니다. 어떤 문자열과도 일치 할 수있는 토큰을 정의하려고합니다. 정규식 구문 <ANY: (~[])+>
이 작동하지 않습니다. 나는 다음과 같은 BNF를 매우 간단하게 뭔가를 달성 갖는 표현을 정의하려면 : 나는 문자열을 구문 분석 할 수있는 방법에 어떤 도움을 다음과 같이문자열에 일치하는 토큰을 정의하십시오.
<exp> ::= "path(" <string> "," <number> ")"
나의 현재 .jj 파일은 다음과 같습니다
options
{
}
PARSER_BEGIN(SimpleAdd)
package SimpleAddTest;
public class SimpleAdd
{
}
PARSER_END(SimpleAdd)
SKIP :
{
" "
| "\r"
| "\t"
| "\n"
}
TOKEN:
{
< NUMBER: (["0"-"9"])+ > |
<PATH: "path"> |
<RPAR: "("> |
<LPAR: ")"> |
<QUOTE: "'"> |
<COMMA: ","> |
<ANY: (~[])+>
}
int expr():
{
String leftValue ;
int rightValue ;
}
{
<PATH> <RPAR> <QUOTE> leftValue = str() <QUOTE> <COMMA> rightValue = num() <LPAR>
{ return 0; }
}
String str():
{
Token t;
}
{
t = <ANY> { return t.toString(); }
}
int num():
{
Token t;
}
{
t = <NUMBER> { return Integer.parseInt(t.toString()); }
}
나는 위의 JavaCC에 파일을 점점 오전 오류는 다음과 같습니다
Exception in thread "main" SimpleAddTest.ParseException: Encountered " <ANY> "path(\'5\',1) "" at line 1, column 1.
Was expecting:
"path" ...
도움을 네, 정확히, 덕분에 문법을 변경하여 토큰의 정의를 대체? – Noor
일치하는 문자의 문자열입니다. –