Próbuję zapisać dane wyjściowe polecenia w pliku. Polecenie to:
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
Jednak wynikowy plik output.txt po otwarciu (przez gedit i jedit na ubuntu) daje mi to:
[0;1;32mTranslationUnitDecl[0m[0;33m 0x4192020[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x4192558[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __int128_t[0m [0;32m'__int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192270[0m [0;32m'__int128'[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x41925b8[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __uint128_t[0m [0;32m'unsigned __int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192290[0m [0;32m'unsigned __int128'[0m
...
Kiedy naprawdę powinno to wyglądać tak:
TranslationUnitDecl 0x4e46020 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x4e46558 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x4e46270 '__int128'
|-TypedefDecl 0x4e465b8 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x4e46290 'unsigned __int128'
...
Myślałem, że może to być problem z kodowaniem, sprawdziłem kodowanie pliku, file -bi output.txt
który wyprowadza text/plain; charset=us-ascii
.
Pomyślałem, że jeśli zmienię kodowanie na utf-8, problem zostanie rozwiązany, więc spróbowałem:
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
ale to nie miało znaczenia.
Co mogę zrobić, aby rozwiązać ten problem?
Problemem nie jest to, że próbuję wyświetlić wersję z podświetloną składnią (nie miałem problemu z jej obejrzeniem). Muszę zapisać plik AST wygenerowany przez clang do pliku, a następnie parsować go, co byłoby trudne przy pozostawionych informacjach o kolorze.
>
nie generuje danych wyjściowych, po prostu oznacza w powłoce, że chcesz umieścić dane wyjścioweclang
polecenia w danym pliku, a nie w terminalu. Następnie oglądasz go w sposób, który nie dopuszcza kodów kolorów w ten sam sposób. Jeśli przejdziesz docat
pliku, działałoby to tak, jakby przejął go terminal i możeszless
zrobić to samo z-R
flagą.