每个未定义的令牌读取的Bison Flex令牌

时间:2011-05-03 09:15:10

标签: regex bison flex-lexer

我正在寻找一种解析文件特定部分的方法。例如,让我们看看:

if {$cpf_step == "pre_restruct"} {
create_power_domain     -name domain_GPU_SW \
            -shutoff_condition "!$mali_pso_condition_pin" \
            -instances "$GPU_SW_instances_list"
} else {
create_power_domain     -name domain_GPU_SW \
            -shutoff_condition "!$mali_pso_condition_pin" 
}               

我对create_power_domain命令感兴趣。我有一个规则,其中使用了不同的令牌。这是我使用的规则 [编辑]当然这个提取之前和之后还有其他的create_power_domain命令,我有兴趣解析[/ EDIT]

file :list_of_statement
;

list_of_statement: statement
    | list_of_statement statement
    ;

statement: power_domain
| T_EVERY_OTHER_THING_I_READ
;   

power_domain: K_CREATE_POWERDOMAIN K_NAME K_IDENTIFIER options_list

现在您可以理解,我只想检查每个电源域是否与语法相对应,我不想关心其他所有内容。

在我的flex tokenizer中,我试过了 .* {return T_EVERY_OTHER_THING_I_READ; } 但后来我记得Lex试图找到最长的匹配正则表达式,这意味着现在所有内容都是T_EVERY_OTHER_THING_I_READ令牌,我不会找到我的K_CREATE_POWERDOMAIN。

那么我的问题是如何忽略那些不属于我感兴趣的规则的一切?

如果您有其他问题,请随时提出。

谢谢

1 个答案:

答案 0 :(得分:1)

假设power_domain由空格,制表符或换行符分隔,不包括来自T_EVERY_OTHER_THING_I_READ的那些应该有帮助,所以请尝试[^\n\r\t ]* {return T_EVERY_OTHER_THING_I_READ; }(未经测试)