Сингл * означает, что может быть любое количество дополнительных позиционных параметров. foo()
может быть вызван как foo(1,2,3,4,5)
. В теле нечто () param2 является последовательностью, содержащей 2-5.
двойное ** средства там могут быть любым количеством дополнительных именованных параметров. bar()
может быть вызван как bar(1, a=2, b=3)
. В теле панели () param2 является словарем, содержащим {'':2, 'b ':3}
Со следующим кодом:
def foo(param1, *param2):
print(param1)
print(param2)
def bar(param1, **param2):
print(param1)
print(param2)
foo(1,2,3,4,5)
bar(1,a=2,b=3)
вывод
1
(2, 3, 4, 5)
1
{'a': 2, 'b': 3}
Есть так много способов ...
Вы можете изучить стековые языки и Форт. Это не очень полезно при разработке других языков, но это то, что можно сделать очень быстро.
Вы можете изучить функциональные языки. Большинство из них основаны на нескольких простых концепциях и имеют простой синтаксический анализ. И, тем не менее, они очень могущественны.
И, наконец, традиционные языки. Они самые тяжелые. Вам нужно будет узнать о лексических анализаторах, синтаксических анализаторах, грамматиках LALR, LL-грамматиках, EBNF и обычных языках, чтобы пройти синтаксический анализ.
Нацеливание на байт-код - это не просто хорошая идея - поступать иначе просто безумие, и в большинстве случаев бесполезно в учебном упражнении.
Сделайте себе одолжение, поищите книги и учебные пособия по компиляторам.
Подойдет либо C, либо Java. Вероятно, у Java есть преимущество, поскольку объектная ориентация хорошо подходит для этого типа задач. Моя личная рекомендация - Scala. Это хороший язык для подобных задач, и он научит вас интересным вещам о языковом дизайне.
Я рекомендую прочитать следующие книги:
Это даст вам инструменты и методы для создания синтаксических анализаторов, лексеров и компиляторов для пользовательских языков.
Вы можете сначала прочитать книгу о компиляторах .
Чтобы действительно понять, что происходит, вы, вероятно, захотите написать свой код на C.
Java wouldn ' Это плохой выбор, если вы хотите написать интерпретируемый язык, такой как Jython . Но поскольку похоже, что вы хотите скомпилировать машинный код, это может быть проще на C.