我正在寻找一种解析文件特定部分的方法。例如,让我们看看:
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。
那么我的问题是如何忽略那些不属于我感兴趣的规则的一切?
如果您有其他问题,请随时提出。
谢谢
答案 0 :(得分:1)
假设power_domain由空格,制表符或换行符分隔,不包括来自T_EVERY_OTHER_THING_I_READ的那些应该有帮助,所以请尝试[^\n\r\t ]* {return T_EVERY_OTHER_THING_I_READ; }
(未经测试)