野牛的通用识别命令

时间:2012-11-15 18:56:50

标签: bison

我正在开发一个野牛计划,需要有一个允许它识别任何东西的最后一个选项。就像其他人一样...

由于

commands: F{
            t[top++] = 'F';
            }
      |PLUS{
            t[top++] = '+';
            }
      |MINUS{
            t[topo++] = '-';
            }
      |ACOL { 
            t[top++] = '[';
            }
      |FCOL{
            t[top++] = ']';
            }
      |POINT{
             t[top++] = '.';
            }
      |EQUAL {
            t[top++] = '=';
            }
      | {  
           /* generic command should be here
           if any of the commands above were found it should run whatever is here*/
      }

1 个答案:

答案 0 :(得分:1)

在标记非终端中识别出任何命令令牌后,附加要运行的逻辑,如下所示。请注意,marker生产的右侧与任何令牌都不匹配。

command_and_marker: command marker;

command:  F
            {
            t[top++] = 'F';
            }
        | PLUS
            {
            t[top++] = '+';
            }
        | MINUS
            {
            t[topo++] = '-';
            }
        | ACOL
            { 
            t[top++] = '[';
            }
        | FCOL
            {
            t[top++] = ']';
            }
        | POINT
            {
            t[top++] = '.';
            }
        | EQUAL
            {
            t[top++] = '=';
            } 
marker:     {  
            /* generic command should be here
            if any of the commands above were found it should run whatever is here*/
            }

我已经制定了我的答案,以匹配代码中的注释,这与您的问题的文本有些不一致。如果您希望command匹配任何内容,而不仅仅是FPLUS等,那么您必须拼出您的词法分析器可以在{{的作品中生成的所有标记1}}。出于几个原因,这不一定是个好主意。