解析器发电机杯中的输出错误



我使用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
    ;

相关内容

  • 没有找到相关文章

最新更新