解析器生成器 CUP 中的错误输出
wrong output in parser generator CUP
我在使用 JAVA 解析器生成器 CUP 时遇到了一些问题,我不知道为什么,有人可以帮助我吗?
杯子文件在这里:
import java_cup.runtime.*;
/* Terminals (tokens returned by the scanner). */
terminal FCONST;
terminal IDENTIFIER;
terminal STRING_DEFINITION;
terminal ASSIGN;
terminal OPEN_SQUARE_BRACKET;
terminal CLOSE_SQUARE_BRACKET;
/* Non-terminals */
non terminal program;
non terminal explicit_value;
non terminal const_array_list_value;
/* Top level rules */
program ::=
FCONST IDENTIFIER ASSIGN explicit_value
;
explicit_value ::=
OPEN_SQUARE_BRACKET const_array_list_value CLOSE_SQUARE_BRACKET
|
STRING_DEFINITION:e
{:
System.out.printf("explicit_value %s \n", e);
:}
;
const_array_list_value ::=
explicit_value
|
const_array_list_value explicit_value
;
并且在解析 "const aaa = ["a", "b", "c"]" 时,输出为:
explicit_value b
explicit_valuec
explicit_valuec
我发现是 CUP 的 bug,我把我的代码改成了 bison。
%{
import java.io.*;
%}
%pure_parser
%error_verbose
%token FCONST;
%token IDENTIFIER;
%token STRING_DEFINITION;
%token ASSIGN;
%token OPEN_SQUARE_BRACKET;
%token CLOSE_SQUARE_BRACKET;
%token SPLIT;
%%
program: FCONST IDENTIFIER ASSIGN explicit_value
;
explicit_value :
OPEN_SQUARE_BRACKET const_array_list_value CLOSE_SQUARE_BRACKET
|
STRING_DEFINITION
{
System.out.printf("explicit_value %s \n", ((ParserVal)()).sval);
}
;
const_array_list_value :
explicit_value
|
const_array_list_value explicit_value
;
我在使用 JAVA 解析器生成器 CUP 时遇到了一些问题,我不知道为什么,有人可以帮助我吗?
杯子文件在这里:
import java_cup.runtime.*;
/* Terminals (tokens returned by the scanner). */
terminal FCONST;
terminal IDENTIFIER;
terminal STRING_DEFINITION;
terminal ASSIGN;
terminal OPEN_SQUARE_BRACKET;
terminal CLOSE_SQUARE_BRACKET;
/* Non-terminals */
non terminal program;
non terminal explicit_value;
non terminal const_array_list_value;
/* Top level rules */
program ::=
FCONST IDENTIFIER ASSIGN explicit_value
;
explicit_value ::=
OPEN_SQUARE_BRACKET const_array_list_value CLOSE_SQUARE_BRACKET
|
STRING_DEFINITION:e
{:
System.out.printf("explicit_value %s \n", e);
:}
;
const_array_list_value ::=
explicit_value
|
const_array_list_value explicit_value
;
并且在解析 "const aaa = ["a", "b", "c"]" 时,输出为:
explicit_value b
explicit_valuec
explicit_valuec
我发现是 CUP 的 bug,我把我的代码改成了 bison。
%{
import java.io.*;
%}
%pure_parser
%error_verbose
%token FCONST;
%token IDENTIFIER;
%token STRING_DEFINITION;
%token ASSIGN;
%token OPEN_SQUARE_BRACKET;
%token CLOSE_SQUARE_BRACKET;
%token SPLIT;
%%
program: FCONST IDENTIFIER ASSIGN explicit_value
;
explicit_value :
OPEN_SQUARE_BRACKET const_array_list_value CLOSE_SQUARE_BRACKET
|
STRING_DEFINITION
{
System.out.printf("explicit_value %s \n", ((ParserVal)()).sval);
}
;
const_array_list_value :
explicit_value
|
const_array_list_value explicit_value
;