我使用Java Parser Generator 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_value c
explicit_value c
我发现它是杯错误,我将代码更改为野牛。
%{
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)($1)).sval);
}
;
const_array_list_value :
explicit_value
|
const_array_list_value explicit_value
;