在另一个文件中使用 lex 生成的源代码
我想在我拥有的另一个代码中使用 lex 生成的代码,但我看到的所有示例都是将 main 函数嵌入到 lex 文件中,而不是相反。
是否可以使用(包含)从 lex 生成的 c 文件到其他代码中以获得类似的内容(不一定相同)?
#include<something>
int main(){
Lexer l = Lexer("some string or input file");
while (l.has_next()){
Token * token = l.get_next_token();
//somecode
}
//where token is just a simple object to hold the token type and lexeme
return 0;
}
i would like to use the code generated by lex in another code that i have , but all the examples that i have seen is embedding the main function inside the lex file not the opposite.
is it possible to use(include) the c generated file from lex into other code that to have something like this (not necessarily the same) ?
#include<something>
int main(){
Lexer l = Lexer("some string or input file");
while (l.has_next()){
Token * token = l.get_next_token();
//somecode
}
//where token is just a simple object to hold the token type and lexeme
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这就是我要开始的:
注意:这是使用C接口的示例
要使用 C++ 接口,请添加
%option c++
请参阅下面的Test.lex
Lexer.h
main.cpp
构建
或者,您可以使用 C++ 接口来 flex(其实验性)
test.lext
main.cpp
构建
This is what I would start with:
Note: this is an example of using a C interface
To use the C++ interface add
%option c++
See belowTest.lex
Lexer.h
main.cpp
Build
Alternatively you can use the C++ interface to flex (its experimental)
test.lext
main.cpp
build
当然。我不确定生成的类;我们使用C生成的
解析器,并从 C++ 调用它们。或者您可以插入任何类型的包装纸
lex 文件中您想要的代码,并从外部调用任何内容
生成的文件。
Sure. I'm not sure about the generated class; we use the C generated
parsers, and call them from C++. Or you can insert any sort of wrapper
code you want in the lex file, and call anything there from outside of
the generated file.
关键字是
%option reentrant
或%option c++
。作为示例,这里是
ncr2a
扫描仪 :扫描码可以保持不变。
这里是使用它的程序:
构建
ncr2a
可执行文件:示例
此示例使用 stdin/stdout 作为输入/输出,并调用
yylex()
一次。要从文件中读取:
@Loki Astari 的答案 显示如何从字符串中读取 (
buffer = yy_scan_string(text, Scanner); yy_switch_to_buffer(buffer,扫描仪)
)。
要为每个令牌调用一次
yylex()
,请在规则定义中添加return
,以在*.l
文件中生成完整令牌。The keywords are
%option reentrant
or%option c++
.As an example here's the
ncr2a
scanner:The scanner code can be left unchanged.
Here the program that uses it:
To build
ncr2a
executable:Example
This example uses stdin/stdout as input/output and it calls
yylex()
once.To read from a file:
@Loki Astari's answer shows how to read from a string (
buffer = yy_scan_string(text, scanner); yy_switch_to_buffer(buffer, scanner)
).
To call
yylex()
once for each token addreturn
inside rule definitions that yield full token in the*.l
file.