Начальные состояния в Законе / Flex

Разница в Python между is и equals (==)

Оператор is может выглядеть так же, как оператор равенства, но они не одинаковы.

is проверяет, указывают ли обе переменные на один и тот же объект, тогда как знак == проверяет, совпадают ли значения двух переменных.

Таким образом, если оператор is возвращает True, тогда равенство определенно True, но обратное может быть или не быть True.

Вот пример, чтобы продемонстрировать сходство и различие.

>>> a = b = [1,2,3]
>>> c = [1,2,3]
>>> a == b
True
>>> a == c
True
>>> a is b
True
>>> a is c
False
>>> a = [1,2,3]
>>> b = [1,2]
>>> a == b
False
>>> a is b
False
>>> del a[2]
>>> a == b
True
>>> a is b
False
Tip: Avoid using is operator for immutable types such as strings and numbers, the result is unpredictable.
6
задан lesmana 6 May 2013 в 12:49
поделиться

3 ответа

Соответствие комментариям в стиле C в Lex / Flex или что-то еще, что хорошо задокументировано:

в документации , а также различные варианты в Интернете.

Вот пример вариант того, что можно найти в документации Flex:

   <INITIAL>{
     "//"              BEGIN(IN_COMMENT);
     }
     <IN_COMMENT>{
     \n      BEGIN(INITIAL);
     [^\n]+    // eat comment
     "/"       // eat the lone /
     }
9
ответ дан 9 December 2019 в 22:38
поделиться

Попробуйте добавить "+" после правила [^ n]. Я не знаю, почему исключительное состояние по-прежнему принимает '==' даже в исключительном состоянии, но, по-видимому, это так. Flex обычно соответствует правилу, которое соответствует наибольшему количеству текста, и добавление «+», по крайней мере, сделает два правила связанными по длине. Если поставить правило КОММЕНТАРИЙ на первое место, оно будет использоваться в случае ничьей.

2
ответ дан 9 December 2019 в 22:38
поделиться

Подсказка:

Проблема в том, что "есть комментарий" правило, похоже, не сопоставляет токены с более одного символа

, поэтому добавьте *, чтобы сопоставить ноль или более символов без новой строки. Вы хотите Zero, иначе пустой комментарий не будет совпадать.

%x COMMENT

//                    { BEGIN(COMMENT); }
<COMMENT>[^\n]*        ;
<COMMENT>\n           { BEGIN(INITIAL); }

"=="                  { return EQUALEQUAL; }

.                     ;
0
ответ дан 9 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: