【问题标题】:Javacc: was expecting one of string literalJavacc:期待字符串文字之一
【发布时间】:2019-02-19 22:56:07
【问题描述】:

我对 javacc 有点陌生。有人可以解释一下为什么我一直收到这个错误。写语法的方式不对吗?

I keep getting this error despite writing the right grammar.

以下是我的代码:

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.

【问题讨论】:

  • 不要使用智能引号。
  • 在黑暗中拍摄,但” ” 使用了花哨的引号。那些应该是" "。其余的也一样。
  • 好的,非常感谢
  • 我有点担心这里的错误信息。引号看起来像 U+201D。 (即右双引号)。那么为什么 JavaCC 会看到 U+00e2 和 U+20ac 呢?也许文件编码不是 JavaCC 所期望的。

标签: java compiler-construction javacc


【解决方案1】:

字符串文字只能以普通的 ASCII 引号 (") 开头,而不是“漂亮”的 unicode 引号 ()。因此,它不会识别您的字符串文字,而是将它们识别为标识符。由于这些地方不允许使用标识符,因此您会收到此错误消息。

所以用纯 ASCII 引号替换你的引号,错误就会消失。

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 2015-10-19
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多