различение строки с flex

Мне нужно токенизировать некоторые строки, которые будут разделены в соответствии с такими операторами, как = and !=. Я успешно использовал регулярное выражение, пока в строке не появился оператор !=. В моем случае строка была разделена на две части, что ожидаемо, но знак ! находится слева, даже если он является частью данного оператора. Поэтому я считаю, что регулярное выражение для этого не подходит, и я хочу извлечь выгоду из lex. Поскольку у меня недостаточно знаний и опыта работы с lex, я не уверен, подходит ли он для моей работы или нет. По сути, я пытаюсь заменить правую часть операторов фактическими значениями из других данных. Как вы думаете, это может быть полезно для моего случая?

Спасибо.


person haluk    schedule 05.04.2010    source источник


Ответы (1)


Стоит ли использовать лекс? Это зависит от сложности вашего языка. Это очень мощный инструмент, который стоит понять (особенно с yacc или в Java вы можете использовать antlr или javacc).

public String[] split(String regex) принимает регулярное выражение, а не просто строку. Вы можете использовать регулярное выражение "!?=", что означает ноль или один !, за которым следует =. Но проблема с использованием split заключается в том, что он не скажет вам, каким был фактический разделитель.

С тем небольшим количеством информации, что у нас есть о вашем приложении, у меня возникнет соблазн использовать регулярные выражения. На stackoverflow есть много экспертов, которые могут помочь. Отличной отправной точкой является руководство по регулярным выражениям по Java.

(Спасибо Falle1234 за то, что заметил мою ошибку - теперь исправлено.)

person John    schedule 06.04.2010
comment
Регулярное выражение должно быть !?= вместо !+=. ? является нулевым или единичным индикатором, а не +, что указывает на один или несколько. - person Falle1234; 17.05.2010