Javacc: ожидал одного из строкового литерала - PullRequest
0 голосов
/ 20 февраля 2019

Я немного новичок в javacc.Может кто-нибудь объяснить мне, почему я продолжаю получать эту ошибку.Разве это не правильный способ написания грамматики?

Я продолжаю получать эту ошибку, несмотря на написание правильной грамматики.

мой код:

options {
    Static = false ;
}
PARSER_BEGIN(Adder)
        class Adder {
            static void main(String[] args) throws ParseException, TokeMgrError {
                Adder parser = new Adder(System.in);
                parser.Start;
        }
        }
PARSER_END(Adder)

SKIP :{
    ” ”
|   ”\n”
|   ”\r”
|   ”\r\n”}
TOKEN :{<PLUS : ”+”>}
TOKEN :{<NUMBER : ([”0”-”9”])+>}

void Start() :
{}
{
        <NUMBER>
        (
            <PLUS>
            <NUMBER>
        )*
        <EOF>6

Это ошибка, которую я получаю:

C:\Users\musta>java -cp C:\javacc-6.0\bin\lib\javacc.jar javacc adder.jj
Java Compiler Compiler Version 6.0_1 (Parser Generator)
(type "javacc" with no arguments for help)
Reading from file adder.jj . . .
org.javacc.parser.ParseException: Encountered " <IDENTIFIER> "\u00e2\u20ac "" at line 14, column 9.
Was expecting one of:
    <STRING_LITERAL> ...
    "<" ...

Detected 1 errors and 0 warnings.

1 Ответ

0 голосов
/ 20 февраля 2019

Строковые литералы могут начинаться только с обычных кавычек ASCII ("), а не "симпатичных" кавычек Юникода ().Поэтому он не распознает ваши строковые литералы как таковые, а распознает их как идентификаторы.Поскольку идентификаторы в этих местах запрещены, вы получаете это сообщение об ошибке.

Поэтому замените ваши кавычки на простые ASCII-кавычки, и ошибка исчезнет.

...