0

我在使用 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"]" 时,输出为:

显式值 b

显式值 c

显式值 c

4

1 回答 1

0

我发现这是 CUP 错误,我将代码更改为野牛。

%{

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
    ;
于 2017-06-30T03:00:50.323 回答