【发布时间】:2017-01-01 10:48:02
【问题描述】:
我正在尝试使用 Flex 和 Bison 为格式化语言创建一个简单的编译器。页面设置信息在输入文件中指定如下:
\pagesetup{2,80}
第一个整数与我的问题无关。第二个(80)是线宽。在输出文件中,
- 我希望在(在此示例中)一行打印 80 个字符(计算空格)并在下一行继续打印时插入新行。
- 我希望能够将输出文件中的某些行(例如标题)居中对齐。
在我的.y 文件中,我有这个:
pageSetupProperty: BSLASH PAGESETUP LBRACE INTEGER COMMA INTEGER RBRACE;
第二个整数是我需要使用的整数,我已将其yylval 设置为与其整数值正确对应。
但是,我被困在这一点上。我已经在 Bison 文档和 SO 中搜索了线宽功能,但找不到方法。
【问题讨论】:
-
这个问题可能太宽泛了,除非你能把它简化为一些我们可以自己执行的代码。我假设你知道你可以在野牛行动中获得整数的价值为 6 美元?
-
是的,我知道。嗯...如果有人能告诉我是否可以使用 Bison 跟踪您在输出文件中特定行的位置,那将会很有帮助。我不是在寻找代码或任何东西,只是为了有人告诉我如何实现这个功能。
-
它不需要野牛功能。解析器输出的所有内容都是您在用 C 编写的操作中输出的。(Bison 不输出任何内容或与输出有任何关系)。只要数一数这些字符串是你自己的长度。这只是一个编码问题,与野牛完全无关。
-
没有线宽功能。 flex 和 bison 都不会生成输出文件,更不用说具有线宽功能的文件了。生成输出取决于您,无论您在生产中编写什么代码动作,以及它的线宽。
-
bison 根本没有“输出”——解析器只是解析输入并运行动作作为响应。你可以让这些动作(直接或间接)产生输出,但这只是 C 代码——野牛与它无关。
标签: compiler-construction bison flex-lexer yacc lex