【问题标题】:Is there a way to display the current parsing action using CUP and Jflex?有没有办法使用 CUP 和 Jflex 显示当前的解析操作?
【发布时间】:2018-03-04 22:28:30
【问题描述】:

对于我的编译器类,我们必须使用 JFlex 和 CUP 创建一个词法分析器和一个语法分析器。部分任务还要求我们为给定的输入文件打印出标记和相应的解析操作。另外,reduce 动作需要显示对应的生产编号。

例如,如果我的解析器的语法是

  1. S -> aXc
  2. X -> bX
  3. X -> b
  4. X -> Yd
  5. Y -> Yd
  6. Y -> d

然后作为输入给出的 abbbc 字符串将输出

a [shift]
b [shift]
b [shift]
b [shift]
c [reduce 3] [reduce 2] [reduce 2] [shift]
[reduce 1]
[accept]

我知道 CUP 有调试选项,但输出需要采用这种特定格式。显示标记很容易,因为我可以在 Flex 规范的规则部分打印出标记,但我不知道如何打印出 CUP 规范中的操作。

【问题讨论】:

    标签: java yacc lex jflex cup


    【解决方案1】:

    我自己回答这个问题,以防其他人遇到同样的问题 - 我最终将我对 CUP 的呼叫从 parser() 更改为 parser_debug(),它显示了有关班次和减少的所有信息,并且有我的词法分析器打印出标记。输出确定了我能够重定向两个应用程序的输出的位置,并将其通过管道传输到我编写的 python 脚本中,该脚本将事物重新格式化为教授想要的方式。

    【讨论】:

    • 方法调用debug_parse()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多