명령 출력을 파일에 저장하려고합니다. 명령은 다음과 같습니다.
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
그러나 결과로 나온 output.txt 파일을 열면 (ubuntu의 gedit 및 jedit에 의해) 다음과 같이 표시됩니다.
[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
...
실제로 다음과 같이 보일 때 :
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'
...
인코딩 문제가 있다고 생각하고 파일의 인코딩을 확인하여 file -bi output.txt
출력 text/plain; charset=us-ascii
합니다.
인코딩을 utf-8로 변경하면 문제가 해결되므로 다음과 같이 시도했습니다.
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
그러나 차이가 없었습니다.
이 문제를 해결하려면 어떻게해야합니까?
문제는 구문 강조 표시 된 버전을 보려고한다는 것이 아닙니다 (처음에는 그것을 보는 데 아무런 문제가 없었습니다). clang에 의해 생성 된 AST를 파일에 저장 한 다음 구문 분석해야합니다. 색상 정보가 남아 있으면 어려울 것입니다.
>
출력을 생성하지 않는다는 점은 주목할 가치가 있습니다clang
. 단말기보다는 주어진 파일에 명령 의 출력을 넣으려는 쉘을 지정합니다 . 그 후에는 동일한 방식으로 색상 코드를 허용하지 않는 방식으로보고 있습니다. 당신이 인 경우에cat
파일 단말기가 이상 걸릴로 작동 것입니다, 당신은 할 수less
와 동일 할-R
플래그.