【问题标题】:CUP parser returns syntax error for a valid inputCUP 解析器返回有效输入的语法错误
【发布时间】:2017-04-13 13:18:55
【问题描述】:

我正在尝试编写一个非常简单的解析器。我将 JFlex 与 Java CUP 一起使用。这是我的代码:

LEX 文件:

import java_cup.runtime.*;


%%

%class Lexer
%line
%column
%cup


%{   
    /*********************************************************************************/
    /* Create a new java_cup.runtime.Symbol with information about the current token */
    /*********************************************************************************/
    private Symbol symbol(int type)               {return new Symbol(type, yyline, yycolumn);}
    private Symbol symbol(int type, Object value) {return new Symbol(type, yyline, yycolumn, value);}

%}



%%


<YYINITIAL> {
<<EOF>>             { return symbol(sym.EOF); }
"|"                 { return symbol(sym.PIPE); } 

}

CUP 文件:

import java_cup.runtime.*;


terminal PIPE;

non terminal myrule;   

myrule  ::=  PIPE {: RESULT = 42; :};

Main.java

import java.io.FileReader;

public class Main {

    public static void main(String[] args) throws Exception {
        CUP_FILECup parser = new CUP_FILECup(new Lexer(new FileReader(args[0])));
        parser.debug_parse();
    }

}

如您所见,我尽量简化,但输入文件只包含一个字符时出现以下错误:“|”。

输入字符 0 处的语法错误

但显然我们为“|”定义了一个适当的推导。

为什么会这样?

编辑:
- “从我的规则开始;”没用

【问题讨论】:

标签: java parsing compilation jflex cup


【解决方案1】:

你能试试用 FileInputStream 代替 FileReader 吗?

(如果可行,您可能想看看https://stackoverflow.com/a/5155255/1415645

您也可以先只尝试词法分析器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2014-09-02
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多