如何为lex和yacc指定输入缓冲区?

问题描述 投票:0回答:1

我必须用lex和yacc创建一个Assembler,但是我必须从c文件中输入lex,我有我的main函数。但是我该怎么做呢?

我只是有一个缓冲区。

char *buffer;

但我想知道如何将缓冲区传递给lex。

我只希望从“C”文件中为lex提供缓冲区。我想要一个展示如何操作的示例。谢谢。

c yacc lex
1个回答
1
投票

从缓冲区扫描非常简单,但几乎肯定不是你想要做的。

如果要从文件中扫描,只需打开文件进行读取,将fopen调用中的值保存到yyin中。确保你检查fopen是否成功,因为如果yyin最终为NULL(如果fopen失败将会发生这种情况),那么扫描仪将从stdin读取。

您需要声明yyin,除非您在输入文件中设置的程序部分包含在与扫描仪定义相同的翻译单元中。声明是:

extern FILE* yyin;

如果你真的想从内存中的单个字符串中读取,你只需要调用

yy_scan_string(buffer);

在开始扫描之前。 (还有一个函数同时接受缓冲区地址和长度,您可以将其用于非NUL终止且可能包含NUL字节的输入:

yy_scan_bytes(buffer, buflen);

但是你提供的缓冲区必须是整个输入;您不使用此接口一次读取一行文件。 (有很多方法可以做到这一点,但我真的不认为这就是你要找的东西。如果你很好奇,就会在Multiple Input Buffers section of the Flex manual中描述。)

© www.soinside.com 2019 - 2024. All rights reserved.