听说ss
uses Bison to parse command line arguments。野牛需要从输出的Flex输入。 Flex的默认情况下需要从标准输入。哪里ss
建立柔性输入来自命令行参数?
野牛称yylex()
每当它需要一个令牌。 yylex()
的返回值是小的整数,这是在野牛语法与%token
声明的枚举常数中的任一个,或一个字符常数为0时,或0以指示EOF。
yylex()
还必须:
yylval
保存令牌的语义值,如果令牌有一个语义值;和yylloc
输入流中保存令牌的位置,如果解析器动作利用位置信息。您可以使用flex
命令行工具建立一个扫描仪。但是,你没有义务这样做。你可以使用不同的工具生成的扫描仪。或者你可以自己定义一个yylex()
功能。扫描仪的接口一直保持尽可能简单,简化实施。
很多工具,包括ss
,使用野牛用手工编码的词法分析器。所以回答你的问题是,ss
从来没有设置flex输入,因为它不使用弹性。 (事实上,这是可能不一定能是一个好主意。许多手写扫描仪比flex
显著慢,而且代码冗长,难推理。)
以上是yyparse
和yylex
之间的默认接口。也可以选择:
yylex
采取额外的参数,如果你yylex
实现需要额外的数据。通常情况下,这些额外的参数将被提供给yyparse()
这样分析器可以在其呼叫yylex()
使用它们。见bison manual section on the %param
directive。yylex
的指针语义对象,如果位置信息时,一个指向位置对象。见bison manual chapter on pure parser interface。