哪里`ss`建立柔性输入来自命令行参数?

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

听说ss uses Bison to parse command line arguments。野牛需要从输出的Flex输入。 Flex的默认情况下需要从标准输入。哪里ss建立柔性输入来自命令行参数?

bison flex-lexer iproute
1个回答
1
投票

野牛称yylex()每当它需要一个令牌。 yylex()的返回值是小的整数,这是在野牛语法与%token声明的枚举常数中的任一个,或一个字符常数为0时,或0以指示EOF。

yylex()还必须:

  • 在全局变量yylval保存令牌的语义值,如果令牌有一个语义值;和
  • 在全局变量yylloc输入流中保存令牌的位置,如果解析器动作利用位置信息。

您可以使用flex命令行工具建立一个扫描仪。但是,你没有义务这样做。你可以使用不同的工具生成的扫描仪。或者你可以自己定义一个yylex()功能。扫描仪的接口一直保持尽可能简单,简化实施。

很多工具,包括ss,使用野牛用手工编码的词法分析器。所以回答你的问题是,ss从来没有设置flex输入,因为它不使用弹性。 (事实上​​,这是可能不一定能是一个好主意。许多手写扫描仪比flex显著慢,而且代码冗长,难推理。)


Other intetfaces

以上是yyparseyylex之间的默认接口。也可以选择:

  • 您可以定义yylex采取额外的参数,如果你yylex实现需要额外的数据。通常情况下,这些额外的参数将被提供给yyparse()这样分析器可以在其呼叫yylex()使用它们。见bison manual section on the %param directive
  • 你可以告诉野牛产生一个纯分析器不依赖于全局变量,在这种情况下,它会调用yylex的指针语义对象,如果位置信息时,一个指向位置对象。见bison manual chapter on pure parser interface
  • 您可以要求一个“推分析器”,这是每一个令牌可用时间扫描调用。见bison manual chapter on push parsers
© www.soinside.com 2019 - 2024. All rights reserved.