2015-01-05 4 views
0

Структура моего файла,Как написать регистр без учета регистрационных правил?

`pragma TOKEN1_NAME TOKEN1_VALUE 
`pragma TOKEN2_NAME TOKEN2_VALUE 
`pragma TOKEN3_NAME TOKEN3_VALUE 
`pragma TOKEN4_NAME TOKEN4_VALUE 
TEXT{ 

// A valid VHDL or verilog 
} 
`pragma TOKEN2_NAME TOKEN2_VALUE 
TEXT{ 

    // VHDL or verilog 
} 

Поскольку я имею дело с обоими Verilog и VHDL.I необходимо перестроить свои символические имена, принимая во внимание, что VHDL чувствителен к регистру. Я хочу использовать единый парсер для обоих случаев. Какой может быть самый эффективный способ для этого? Содержит ли какая-либо функциональность флеш-память, позволяющая совпадать с регистрозависимым шаблоном, и мы можем позже проверить, дезинфицированы ли имена токенов (имея все маленькие буквы), если формат файла Verilog?

+0

Считаете ли вы, что это хорошая идея для обработки обоих языков с помощью одной грамматики? Вы пытаетесь встроить VHDL и Verilog в один файл или TextStream? – Paebbels

+0

Flex/Lex поддерживает это с аргументом -i. Он будет генерировать анализатор, нечувствительный к регистру. –

ответ

4

Flex поддерживает кейс-нечувствительность внутри шаблонов, используя синтаксис:

(?i:...) 

Узор между : и ) будет сканироваться без учета случае.

Это не подразумевает, что вход «дезинфицирован», превращен в нижний регистр или изменен каким-либо образом. Это ваша ответственность, если вы хотите это сделать. Все это означает, что (например):

(?i:KeyWord) 

будет соответствовать любому из входов KEYWORD, keyword, kEywOrd и т.д.

Если у вас есть древний гибкий вариант (старше 2.5.34, выпущенный в конце 2007 года) и по каким-то причинам вы не хотите обновить, вы должны привыкнуть к написанию шаблонов, как это:

[Kk][Ee][Yy][Ww][Oo][Rr][Dd] 

, которые вы до сих пор найти примеры в старых файлах определения сканера ,

+0

какая версия flex поддерживает это? Я не могу использовать функциональность в Flex версии 2.5.4, или я могу сделать что-то неправильно. - это правильный способ использования (? I: «begin») {// action}? –

+0

@AnkurGautam: вам нужна версия 2.5.34 (выпущена 2007-12-12), но я бы рекомендовал обновить ее до текущей версии вместо обновления с 20-летней версии до семилетней версии. Ваш синтаксис в порядке, хотя вам не нужны кавычки, '(? I: begin)' будет работать нормально. – rici

Смежные вопросы