Is there working example of flex + bison with inpu

2019-09-10 09:30发布

Is there working example of flex + bison (bison is necessary) with input from string, not file?

I have tried to use YY_BUFFER_STATE ... functions instead of yyin and got error "flex scanner push-back overflow". Flex changes InputString[1] to 0. Several other answers on SO are of little help - actual code will be much more useful.

2条回答
姐就是有狂的资本
2楼-- · 2019-09-10 10:00

You can also use yy_scan_buffer(char*,size_t)

查看更多
你好瞎i
3楼-- · 2019-09-10 10:26

The way to scan memory region is described in the Flex manual.

Flex modifies the buffer given by yy_scan_buffer. If you need to avoid to be modified, yy_scan_bytes or yy_scan_string will be appropriate.

Whether scanning a file or memory region is independent of the parser (bison).

If your lexer fails, I'd recommend checking whether it fails too even when reading from a file.

For your information, the following flex code prints ab and cd in my environment.

%%

[a-z]+  puts( yytext );
.
\n

%%

int yywrap( void ) { return 1; }

int main() {
  yy_scan_string("ab cd");
  yylex();
  yy_delete_buffer( YY_CURRENT_BUFFER );
}
查看更多
登录 后发表回答