Я работаю над проектом Transpile Autohotkey V2, чтобы C# с использованием Antlr4 и Roslyn, но сталкиваюсь с некоторыми проблемами, которые я не могу понять, как хорошо решить. < /p>
Для простоты я постараюсь поставить пример, используя только несколько грамматических элементов, описанных этими правилами: < /p>
Запреты начинаются в начале строка, предшествующие пробелы игнорируется.
Назначение определяется как SingleExpression: = SingleExpression , например, A: = 1 или a: = b: = 1 < /код>. Белости не являются обязательными, а новички разрешены с обеих сторон оператора назначения. < /Li>
< /ol>
действителен. (a := 1) := 2 приводит к присвоению 2 .
3. Оператор вызова функции начинается с идентификатора или выражения в скобках (или доступа к члену, выходит за рамки этой статьи), за ним следуют пробелы, а затем следует список аргументов, разделенных запятыми.
4. Любые два отдельных выражения могут быть неявно объединены в строку, по крайней мере, с одним пробелом между ними. Например, a := 1 2 объединяет цифры до 12 и присваивает их значению a. Конец строки допускается только в том случае, если конкатенация заключена в скобки или круглые скобки.
считается одним из них, и назначается 12 .
Явная конкатенация также возможна с оператором. , в каком случае С обеих сторон должно быть пробел/новая линия. Если с обеих сторон нет пробелов, то это доступ объекта. :: , за которым следует либо еще одна горячая клавиша (на отдельной строке), либо заявление. Например, a :: b: = 1 означает «создать горячую клавишу для ключа a , который затем назначает 1 переменной b . A :: msgbox Вызывает вызов функции для MSGBOX . Код> Создает функциональность, где нажатие клавиши отправляет вместо этого b . Msgbox - это горячая клавиша только потому, что ключ с именем msgbox не существует. Оператор выражения a: = 1 Повторяемый 300 000 раз анализируется и выполняется Autohotkey за
Я работаю над проектом Transpile Autohotkey V2, чтобы C# с использованием Antlr4 и Roslyn, но сталкиваюсь с некоторыми проблемами, которые я не могу понять, как хорошо решить. < /p> Для простоты я постараюсь поставить пример, используя только несколько грамматических элементов, описанных этими правилами: < /p> [list] [*] Запреты начинаются в начале строка, предшествующие пробелы игнорируется. [*] Назначение определяется как SingleExpression: = SingleExpression , например, A: = 1 или a: = b: = 1 < /код>. Белости не являются обязательными, а новички разрешены с обеих сторон оператора назначения. < /Li> < /ol> [code]a:= 1 [/code] действителен. (a := 1) := 2 приводит к присвоению 2 . 3. Оператор вызова функции начинается с идентификатора или выражения в скобках (или доступа к члену, выходит за рамки этой статьи), за ним следуют пробелы, а затем следует список аргументов, разделенных запятыми. 4. Любые два отдельных выражения могут быть неявно объединены в строку, по крайней мере, с одним пробелом между ними. Например, a := 1 2 объединяет цифры до 12 и присваивает их значению a. Конец строки допускается только в том случае, если конкатенация заключена в скобки или круглые скобки. [code]a := 1 hello [/code] будет рассматриваться как два оператора: присвоение 1 и вызов функции hello. [code]a := (1 2) [/code] считается одним из них, и назначается 12 . Явная конкатенация также возможна с оператором. , в каком случае С обеих сторон должно быть пробел/новая линия. Если с обеих сторон нет пробелов, то это доступ объекта. :: , за которым следует либо еще одна горячая клавиша (на отдельной строке), либо заявление. Например, a :: b: = 1 означает «создать горячую клавишу для ключа a , который затем назначает 1 переменной b . A :: msgbox Вызывает вызов функции для MSGBOX . Код> Создает функциональность, где нажатие клавиши отправляет вместо этого b . Msgbox - это горячая клавиша только потому, что ключ с именем msgbox не существует. Оператор выражения a: = 1 Повторяемый 300 000 раз анализируется и выполняется Autohotkey за