Это чрезвычайно сложная задача, потому что языки программирования имеют сложную грамматику.Если вы хотите отформатировать не только C #, но и C и C ++, это даже более сложно - возможно, невозможно, потому что может быть синтаксис в одном языке, который недопустим (или означает что-то другое) в другом.
Если вы хотите сделать это только для C #, вам нужен синтаксический анализатор C #.Доступно несколько свободно распространяемых синтаксических анализаторов C #:
Когда у вас будет дерево разбора, вам придется пройтись подерево и постепенно выводить его правильно отформатирован.Некоторые синтаксические анализаторы C # могут уже иметь эту функцию.
Относительно двусмысленности грамматики: рассмотрим следующую строку кода:
Method(a<b,c>(d+1));
В C # правильное форматирование будет:
Method(a<b, c>(d + 1)); // “a<T1, T2>” is generic; Method has one argument
В C и C ++ я считаю, что правильное форматирование будет:
Method(a < b, c > (d + 1)); // Method has two arguments with binary operators