小编sri*_*ity的帖子

如何设置flex/bison规则来解析逗号分隔的参数列表

我希望能够使用flex/bison解析规则解析非空的,一个或多个元素,逗号分隔(以及可选的带括号的)列表.

一些例如可解析的列表:

  • 1
  • 1,2
  • (1,2)
  • (3)
  • 3,4,5
  • (3,4,5,6-)

等等

我使用以下规则来解析列表(最终结果是解析元素'顶级列表'),但它们在解析时似乎没有给出所需的结果(在提供有效列表时我得到语法错误).关于我如何设置它的任何建议?

cList :   ELEMENT
           {
              ...
           }
        | cList COMMA ELEMENT
           {
              ...
           }
        ;

topLevelList :  LPAREN cList RPAREN
                 {
                     ...                 
                 }
              | cList
                 {
                     ...
                 }
          ;
Run Code Online (Sandbox Code Playgroud)

parsing yacc lex bison flex-lexer

7
推荐指数
1
解决办法
5340
查看次数

数组与列表引用问题

关于以下代码的两个问题:


%h1 = {
    'key1' => ( 1, 2, 3 ),
    'key2' => ( 4, 5, 6 )
    };

%h2 = {
    'key1' => [ 1, 2, 3 ],
    'key2' => [ 4, 5, 6 ]
    };

print $(@h1{'key2'})[1];
Run Code Online (Sandbox Code Playgroud)

Q1:h1和h2有什么区别?请不要说'一个是列表的哈希和另一个数组的哈希'...相反,我想知道在使用方面的转换.

Q2:为什么$(@h1{'key2'})[1]print语句中的引用不能编译?这是我的想法:我想访问对应于'key2'的数组/列表:@h1{'key2'}.然后我想访问该列表/数组中索引1处的标量:$(@h1{'key2'})[1].为什么这是错的?这个变量引用的东西很混乱.

perl

4
推荐指数
3
解决办法
210
查看次数

标签 统计

bison ×1

flex-lexer ×1

lex ×1

parsing ×1

perl ×1

yacc ×1