Java中的打印机声明

时间:2014-03-22 14:48:14

标签: java bison

我使用带有%define parse.error verbose选项的Bison来提供更多信息性错误消息。 Bison使用Java语言生成解析器。目前,解析器打印诸如

之类的消息

syntax error, unexpected IDENTIFIER, expecting RPAREN or COMMA

我想使用%printer声明来替换默认令牌名称,但我在bison docs中发现它们在Java中不受支持:

Java parsers do not support %printer, as toString() can be used to print the semantic values. This however may change (in a backwards-compatible way) in future versions of Bison.

每个令牌都声明了sematic值的类型,例如: %token <Symbol> IDENTIFIER其中Symbol具有自定义toString()方法。

但我仍然不知道如何告诉解析器调用toSting()方法而不是打印默认令牌的名称。

你有什么建议吗?

提前致谢!

的Grzegorz

1 个答案:

答案 0 :(得分:1)

使用别名声明令牌:

%token <id> IDENTIFIER "identifier"
%token RPAREN "right parenthesis"

%printer函数不会在错误消息中使用,即使它是用Java实现的,因为错误是在谈论尚未遇到的令牌,而%printer方法用于打印遇到的令牌的语义值。未被攻击的令牌不存在,因此无法打印其语义值,只能打印其描述。