gpt4 book ai didi

java - BYACCJ : How do I include line number in my error message?

转载 作者:行者123 更新时间:2023-12-02 08:45:07 24 4
gpt4 key购买 nike

这是我当前的错误处理函数:

public void yyerror(String error) {
System.err.println("Error: "+ error);
}

这是我在 BYACC/J homepage 上找到的默认错误函数。我找不到任何方法来添加行号。我的问题与此类似question 。但这个问题的解决方案在这里不起作用。

对于我的词法分析器,我使用 JFlex 文件。

最佳答案

这与您链接的问题中提出的 bison/flex 解决方案没有什么不同。至少,原理是一样的。只是细节有所不同。

关键事实是,需要计算行数的是扫描器,而不是解析器,因为扫描器将输入文本转换为标记。解析器对原始文本一无所知;它只是接收一系列经过精心处理的 token 。

因此,我们必须搜索 JFlex 的文档,找出如何让它跟踪行号,然后我们在选项和声明部分找到以下内容:

  • %line

    Turns line counting on. The int member variable yyline contains the number of lines (starting with 0) from the beginning of input to the beginning of the current token.

JFlex 手册没有提到 yyline 是一个私有(private)成员变量,因此为了从解析器获取它,您需要在 JFlex 文件中添加如下内容:

%line
{
public int GetLine() { return yyline + 1; }
// ...

}

然后您可以在错误函数中添加对 GetLine 的调用:

public void yyerror (String error) {
System.err.println ("Error at line " + lexer.GetLine() + ": " + error);
}

这有时会产生令人困惑的错误消息,因为在调用 yyerror 时,解析器已经请求了先行标记,该标记可能位于错误后面的行上,甚至与错误分开通过几行评论。 (当错误是缺少语句终止符时,通常会出现此问题。)但这是一个好的开始。

关于java - BYACCJ : How do I include line number in my error message?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61127717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com