jflex / cup-错误:找不到符号{返回符号(sym.EQEQ);

时间:2018-09-29 23:33:49

标签: jflex cup

我正在尝试在以下示例上运行该示例: http://jflex.de/manual.html#Example 我复制了示例,仅更改了文件/类名。

运行jflex似乎可以正常工作。

$ jflex -v -d output/ grammer/scanner.flex 
Reading "grammer/scanner.flex"
Constructing NFA : 148 states in NFA
Converting NFA to DFA : 
.........................................
45 states before minimization, 26 states in minimized DFA

下一步,我尝试编译输出。无论我做什么,都会遇到这些错误。

$ javac -cp .*:dependancies/java-cup-11b.jar output/scanner.java 
output/scanner.java:788: error: cannot find symbol
            { return symbol(sym.IDENTIFIER);
                               ^
  symbol:   variable IDENTIFIER
  location: interface sym
output/scanner.java:793: error: cannot find symbol
            { return symbol(sym.INTEGER_LITERAL);
                               ^
  symbol:   variable INTEGER_LITERAL
  location: interface sym
output/scanner.java:803: error: cannot find symbol
            { return symbol(sym.EQ);
                               ^
  symbol:   variable EQ
  location: interface sym
output/scanner.java:808: error: cannot find symbol
            { return symbol(sym.PLUS);
                               ^
  symbol:   variable PLUS
  location: interface sym
output/scanner.java:819: error: cannot find symbol
                                   return symbol(sym.STRING_LITERAL,
                                                    ^
  symbol:   variable STRING_LITERAL
  location: interface sym
output/scanner.java:830: error: cannot find symbol
            { return symbol(sym.EQEQ);
                               ^
  symbol:   variable EQEQ
  location: interface sym
6 errors

我忘记了什么?

http://czt.sourceforge.net/dev/java-cup-runtime/apidocs/java_cup/runtime/Symbol.html

1 个答案:

答案 0 :(得分:0)

使用 jflex ,您将生成 lexer

您还需要使用 cup 生成 parser 并将其添加到您的类路径中。

建议您使用

,而不要尝试手动编译内容
  • 使用jflex-maven-plugincup-maven-plugin的Maven。 参见examples/simple/pom.xml
  • 或bazel以及jflex()cup()规则。 参见examples/simple/BUILD

PR 452是将这个特定示例(当前在回归测试套件中)移至示例目录的建议。