Гипотетическое затруднение конкатенации

Поэтому я работаю над простым микроязыком / альтернативным синтаксисом для PHP. Его синтаксис требует многого от JavaScript и CoffeeScript, включая несколько моих собственных концепций. Я вручную написал анализатор (без генератора синтаксического анализатора) в PHP, чтобы преобразовать код в PHP, а затем выполнить его. Это скорее доказательство концепции / учебного пособия, чем что-либо другое, но я бы солгал, если бы сказал, что не хотел бы, чтобы он использовался в реальном проекте в один прекрасный день.

Во всяком случае, вот небольшая проблема, с которой я столкнулся, я думал, что навяжу тебе великие интеллекты:

Как вы знаете в PHP, период (.) Используется для конкатенации строк. Однако в JavaScript он используется для цепочки методов.

Теперь одна вещь, которая раздражает меня в PHP, – это использовать эту кровавую стрелу (->) для моих цепочек методов, поэтому я пошел по JavaScript и реализовал период (.) Для использования с объектами.

(Я думаю, что вы уже видите проблему)

Поскольку в настоящее время я пишу только «немой» парсер, который просто выполняет огромный поиск и заменяет, нет способа отличить, используется ли период (.) Для конкатенации или для цепочки методов.

«Поэтому, если вы пытаетесь быть похожим на JavaScript, просто используйте оператор дополнения (+) Franky!», Я слышу, как вы кричите. Ну, я бы хотел, но потому, что оператор добавления (+) используется для математики в PHP, я бы просто поставил себя в ту же ситуацию.

Если я не смогу сделать свой парсер достаточно умным (с дерьмовой нагрузкой), чтобы знать, что, когда оператор добавления (+) работает с целыми числами, не преобразовывайте его в период (.) Для конкатенации. Я довольно сильно завинчен.

Но вот круто. Потому что это довольно новый язык. Мне не нужно использовать оператор периода или сложения для конкатенации.

Итак, мой вопрос: если бы я решил принять новый метод конкатенации строк, какой персонаж имел бы смысл?

Должен ли он быть одним персонажем? .. мог работать!

Любое множество комбинаций, таких как ~~ или >: даже!

Если вы не хотите использовать + или., То я бы рекомендовал ^, потому что это используется на некоторых других языках для конкатенации строк, и я не считаю, что он используется для чего-либо в PHP. Изменить: Было указано, что он используется для XOR. Одним из вариантов было бы использовать ^ в любом случае, так как побитовое XOR обычно не используется, а затем отображать что-то еще, как ^^ в XOR. Другой вариант – использовать для конкатенации. Проблема в том, что отдельные символы в основном принимаются.

Другой вариант – использовать +, но сопоставить его с функцией, которая объединяется, когда один аргумент является строкой, и добавляет иначе. Чтобы не нарушать вещи, которые полагаются на строки, которые являются числами, которые рассматриваются как их значения, мы должны, вероятно, рассматривать числовые строки как числа для этих целей. Вот функция, которую я буду использовать.

 function smart_add($arg1,$arg2) { if ($arg1.is_numeric() && $arg2.is_numeric()) { return $arg1 + $arg2; } else { return $arg1 . $arg2; } } 

Затем a + b + c + d просто превращается в smart_add(smart_add(smart_add(a,b),c),d)

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

Итак, мой вопрос: если бы я решил принять новый метод конкатенации строк, какой персонаж имел бы смысл?

Как вам хорошо известно, вам нужно выбрать персонажа, который не используется как один из операторов PHP. Поскольку конкатенация строк является обычной методикой, я попытался бы избежать использования символов, которые вам нужно нажать SHIFT для ввода, поскольку эти символы будут помехой.

Вместо того, чтобы пытаться назначить один символ для конкатенации строк (поскольку большинство из них уже используется), возможно, вы должны определить свой собственный синтаксис для конкатенации строк (или любой другой операции, которую нужно переписать с помощью другого оператора), в виде сокращенного оператора (sort из). Что-то вроде:

 [$string, $string] 

Должно быть легко получить парсер и сформировать конкатенированную строку.

Редактирование: Следует также отметить, что, если вы используете литералы или переменные, нет способа (насколько я знаю) путать этот синтаксис с любыми другими функциями PHP, поскольку запятая в середине недействительна для манипуляций с массивами. Таким образом, все последующие все равно будут признаны как конкатенация строк, а не что-то еще в PHP.

 ["stack", "overflow"] ["stack", $overflow] [$stack, $overflow] 

Изменить: поскольку это противоречит нотации JSON, существуют следующие альтернативные варианты:

  1. Изменение разделителя
  2. Опускание разделителя

Пример:

 [$stack $overflow $string $concatenation] // Use nothing (but really need space)