【问题标题】:JavaCC: parsing a string and not reading from stdin or from a fileJavaCC:解析字符串而不是从标准输入或文件中读取
【发布时间】:2014-05-02 14:16:03
【问题描述】:

我用 JavaCC 编写了一个解析器,我可以在 eclipse 中成功地测试它从标准输入(键盘)读取流。现在我想用另一个类的解析器调用这个类。要解析的数据以字符串形式提供。目前我没有找到将字符串作为参数传递的方法。只能从标准输入或文件中解析。在我看来,将字符串写入文件而不是解析文件不是解决方案。

知道如何解决这个问题吗? 我不敢相信我是唯一一个只想分析字符串而不是完整文件的人。

亲切的问候 汉斯

--

【问题讨论】:

  • 没有从InputStream解析的选项吗?
  • 我相信您需要将字符串包装在阅读器中,例如Reader reader = new BufferedReader(new StringReader('abc')); 然后以阅读器作为参数调用您的解析器。

标签: java string parsing javacc


【解决方案1】:

您可以使用 InputStream 构造解析器实例。本页向您展示如何创建 InputStream,How does one create an InputStream from a String?

然后您可以使用 JavaCC API 中定义的 this 来构建您的解析器。

TheParser.TheParser(java.io.InputStream stream) 

请注意:

此构造函数仅在选项user_token_manager和user_char_stream是false时可用的。如果选项 STATIC 为真,则此构造函数(连同其他构造函数)可以仅调用一次以创建单个解析器对象。

https://javacc.java.net/doc/apiroutines.html

您在 option_bindings 中设置这些选项。 https://javacc.java.net/doc/javaccgrm.html

【讨论】:

  • 感谢您的回答。它解决了我的问题。但正如你所说,构造函数只能调用一次。我试过 ReInit() 但这似乎有一个错误。并且使用 static = false 我遇到了问题:“无法从 YYYYYY 类型对非静态方法 xxxxx() 进行静态引用”。那里也可以找到很多问题但没有解决方案。多谢。 // 汉斯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 2017-08-09
  • 2022-08-16
  • 2014-05-27
  • 2012-07-21
  • 2011-06-18
相关资源
最近更新 更多