Токен Bison Flex для каждого неопределенного чтения токена - PullRequest
0 голосов
/ 03 мая 2011

Я ищу способ разобрать только определенную часть файла.Например, давайте посмотрим:

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.У меня есть правило с другим токеном, используемым в нем.Вот правило, которое я использую [EDIT]. Конечно, есть вещи до и после этого извлечения, а также другие команды 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-токенизаторе я попытался
.* {return T_EVERY_OTHER_THING_I_READ; }, но потом я вспомнил, что Lexпытается найти самое подходящее регулярное выражение, которое подразумевает, что теперь все будет токеном T_EVERY_OTHER_THING_I_READ, и я не найду мой K_CREATE_POWERDOMAIN, например.

Мой вопрос: как тогда игнорировать все, что не является частью правилаинтересуетесь?

если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

Спасибо

1 Ответ

1 голос
/ 03 мая 2011

Предполагая, что power_domain ограничен пробелом, символом табуляции или новой строкой, за исключением тех, которые из T_EVERY_OTHER_THING_I_READ должны помочь, поэтому попробуйте что-то вроде [^\n\r\t ]* {return T_EVERY_OTHER_THING_I_READ; } (не проверено)

...