Powiedzmy mam funkcję:Funkcja połączenia zna tylko typy parametrów w czasie wykonywania w C?
int foo (int A, char B){...}
Jedną z cech Chcę zaimplementować jest możliwość, aby użytkownik mógł wywołać dowolną funkcję w sprawie stosowania przez terminal Linux. Więc jako wejście dla oprogramowania, w terminalu wpisać oni coś takiego:
foo 2 'a'
Wtedy moja aplikacja analizuje to, i za pomocą tabel symboli jest w stanie znaleźć adres do foo()
, jak również wpisz dla wszystkich swoich parametrów.
Jednak nie jestem pewien, w jaki sposób przekazałbym parametry do funkcji podczas wywoływania, ponieważ mogę mieć setki różnych kombinacji typów parametrów w zależności od funkcji zwanej.
Jakąkolwiek wskazówkę, jak można to osiągnąć bez setek zagnieżdżonych instrukcji if, aby oddać parametry do odpowiednich typów przed wywołaniem funkcji?
Ta funkcjonalność jest podobna do funkcji GDB, w której można wykonać call foo(2,'a')
i wywołania GDB, które działają.
Chcesz zbudować własnego interpretera języka C? Zacznijmy od nauki gramatyk formalnych, automatów stanów, lexerów, analizatorów składni i AST. – Drop
Będziesz chciał przeprowadzić pewne sprawdzanie typu, więc jeśli użytkownik napisze 'foo 'a' 2', możesz uniknąć wywołania funkcji z niepoprawnymi argumentami (co prawdopodobnie spowodowałoby awarię twojego programu). Co oznacza, że potrzebujesz sposobu reprezentowania typów wartości w czasie wykonywania i metadane opisujące typy, których oczekuje funkcja, i kod do porównywania tych wartości z innymi. I w tym momencie w zasadzie implementujesz interpreter języka [dynamicznie wpisanego] (https://en.wikipedia.org/w/index.php?title=Dynamic_typing). Rozważ użycie * istniejącego * dynamicznie pisanego języka, takiego jak Python. – Wyzard
@Drop To pytanie nie ma nic wspólnego z interpretacją C. Chodzi o wywoływanie skompilowanych funkcji używających konwencji wywoływania C. –