【问题标题】:Parsing var-args style commands with Bison使用 Bison 解析 var-args 样式的命令
【发布时间】:2023-04-11 07:30:02
【问题描述】:

我对 Flex/Bison 还很陌生,我正在尝试解析格式为的字符串:

COMMAND ARG1, ARG2, ARGn (, ARGn+1, ARGn+2 ...);

这样 args 1、2 和 n 是必需的,但 n+1、n+2、... 是可选的,没有限制。

我将如何在 Flex/Bison 中执行此操作?

当我将我的语法定义为:

args:
  ARG
  |
  ARG COMMA args
;

var_command:
  COMMAND ARG COMMA ARG COMMA args SEMICOLON
  {
    printf("arg1: %s, arg2: %s\n", $2, $4);
  }

我只能(如上)引用前 2 个参数,如何引用 args: 定义中匹配的内容?

我已经测试了语法,我可以向它抛出任意数量的参数,它匹配正确,它只是处理那些让我无法理解的数据。

【问题讨论】:

    标签: bison flex-lexer


    【解决方案1】:

    在这种情况下,ARGs 的列表可能需要由 程序员。
    例如(虚构代码):

    %union { args_data *ad; }
    %type <ad> args
    
    %%
    
    args:
      ARG
      {
        args_data *ad = alloc_args_data();
        append_arg(ad, $1);
        $$ = ad;
      }
      |
      args COMMA ARG
      {
        append_arg($1, $3);
        $$ = $1;
      }
    ;
    

    【讨论】:

    • 啊有趣,把它们放在一边,然后在var_command定义中使用?会试一试。
    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多