【问题标题】:How to use Flex and Bison (Lex/Yacc) to set line width in the output file?如何使用 Flex 和 Bison (Lex/Yacc) 在输出文件中设置线宽?
【发布时间】:2017-01-01 10:48:02
【问题描述】:

我正在尝试使用 Flex 和 Bison 为格式化语言创建一个简单的编译器。页面设置信息在输入文件中指定如下:

\pagesetup{2,80}

第一个整数与我的问题无关。第二个(80)是线宽。在输出文件中,

  1. 我希望在(在此示例中)一行打印 80 个字符(计算空格)并在下一行继续打印时插入新行。
  2. 我希望能够将输出文件中的某些行(例如标题)居中对齐。

在我的.y 文件中,我有这个:

pageSetupProperty: BSLASH PAGESETUP LBRACE INTEGER COMMA INTEGER RBRACE;

第二个整数是我需要使用的整数,我已将其yylval 设置为与其整数值正确对应。

但是,我被困在这一点上。我已经在 Bison 文档和 SO 中搜索了线宽功能,但找不到方法。

【问题讨论】:

  • 这个问题可能太宽泛了,除非你能把它简化为一些我们可以自己执行的代码。我假设你知道你可以在野牛行动中获得整数的价值为 6 美元?
  • 是的,我知道。嗯...如果有人能告诉我是否可以使用 Bison 跟踪您在输出文件中特定行的位置,那将会很有帮助。我不是在寻找代码或任何东西,只是为了有人告诉我如何实现这个功能。
  • 它不需要野牛功能。解析器输出的所有内容都是您在用 C 编写的操作中输出的。(Bison 不输出任何内容或与输出有任何关系)。只要数一数这些字符串是你自己的长度。这只是一个编码问题,与野牛完全无关。
  • 没有线宽功能。 flexbison 都不会生成输出文件,更不用说具有线宽功能的文件了。生成输出取决于您,无论您在生产中编写什么代码动作,以及它的线宽。
  • bison 根本没有“输出”——解析器只是解析输入并运行动作作为响应。你可以让这些动作(直接或间接)产生输出,但这只是 C 代码——野牛与它无关。

标签: compiler-construction bison flex-lexer yacc lex


【解决方案1】:

它不需要野牛功能。解析器输出的所有内容都是您在用 C 编写的操作中输出的。(Bison 不输出任何内容或与输出有任何关系)。只要数一数这些字符串是你自己的长度。这只是一个编码问题,与野牛完全无关。

还有:

没有线宽功能。 flexbison 都不会生成输出文件,更不用说具有线宽功能的输出文件了。生成输出取决于您在生产操作中编写的任何代码,以及它的线宽。

感谢 Brian Tompsett 和 EJP 在 cmets 中提供了完整的答案。

根据 SE 政策 here 从他们的 cmets 得出答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多