我目前正在使用google-code-prettify进行语法高亮显示。它似乎不支持 LLVM。这是格式化 LLVM 时的样子:
这很丑陋。是否有任何支持 LLVM 的前端语法荧光笔?
我从LLVM TextMate Bundle 项目中获取了 LLVM 汇编语法突出显示的模式,并为google-code-prettify编写了一个插件。
PR['registerLangHandler'](
PR['createSimpleLexer'](
[
// Whitespace
[PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
// A double quoted, possibly multi-line, string.
[PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'],
// comment.llvm
[PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'],
],
[
// llvm instructions
[PR['PR_KEYWORD'], /^\b(?:add|alloca|and|ashr|bitcast|br|call|eq|exact|extractelement|extractvalue|fadd|fcmp|fdiv|fmul|fpext|fptosi|fptoui|fptrunc|free|frem|fsub|getelementptr|icmp|inbounds|indirectbr|insertelement|insertvalue|inttoptr|invoke|load|lshr|malloc|mul|ne|nsw|nuw|oeq|oge|ogt|ole|olt|one|or|ord|phi|ptrtoint|ret|sdiv|select|sext|sge|sgt|shl|shufflevector|sitofp|sle|slt|srem|store|sub|switch|trunc|udiv|ueq|uge|uge|ugt|ugt|uitofp|ule|ule|ult|ult|une|uno|unreachable|unwind|urem|va_arg|xor|zext)\b/, null],
// llvm keywords
[PR['PR_KEYWORD'], /^\b(?:addrspace|alias|align|alignstack|alwaysinline|appending|asm|blockaddress|byval|c|cc|ccc|coldcc|common|constant|datalayout|declare|default|define|deplibs|dllexport|dllimport|except|extern_weak|external|fastcc|gc|global|hidden|inlinehint|inreg|internal|linkonce|linkonce_odr|metadata|module|naked|nest|noalias|nocapture|noimplicitfloat|noinline|noredzone|noreturn|nounwind|optsize|private|protected|ptx_device|ptx_kernel|readnone|readonly|section|sideeffect|signext|sret|ssp|sspreq|tail|target|thread_local|to|triple|uwtable|volatile|weak|weak_odr|x86_fastcallcc|x86_stdcallcc|zeroext)\b/, null],
// variable.llvm
[PR['PR_TYPE'], /^\s(?:[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*)/],
// variable.language.llvm
[PR['PR_TYPE'], /^\s(?:[%]\d+)/],
// storage.type.language.llvm
[PR['PR_PLAIN'], /^\b(?:i\d+\**)/],
// variable.metadata.llvm
[PR['PR_PLAIN'], /^(!\d+)/],
// constant.numeric.float.llvm
[PR['PR_LITERAL'], /^\b\d+\.\d+\b/],
// constant.numeric.integer.llvm
[PR['PR_LITERAL'], /^\b(?:\d+|0(?:x|X)[a-fA-F0-9]+)\b/],
]),
['llvm', 'll']);
以下是演示 jsFiddle和带有演示页面和自述文件的Gist的链接。
考虑到 LLVM 是一种相当晦涩难懂的编程语言,您很难找到专门为它设计的语法高亮器。然而,这并不意味着你不能稍微作弊,并让某些事情发挥作用。我建议使用 SyntaxHighlighter。http://alexgorbatchev.com/SyntaxHighlighter
尽管它本身并不支持 LLVM,但它为各种其他编程语言提供了许多内置画笔。我会尝试一下,并尝试将不同的画笔(语法荧光笔)应用于您的 LLVM 代码。有些会匹配得很好,而有些会显得平淡无奇,就像您演示的示例一样。
如果你看这里,你还会看到许多非官方的画笔也存在。这是使用 SyntaxHighlighter 的一个好处——如果曾经设计过 LLVM 画笔(或者如果您决定自己设计它),那么实现起来会很简单。
祝你好运!
不知道你是否是一个 linux 人,因为你使用 Python 我想你会。Emacs 和 Vim 似乎支持 LLVM 语法高亮。请参阅http://llvm.org/docs/GettingStarted.html。如果您不想使用这些,也许您可以使用其他 IDE 或编辑器中提供的语法文件(稍加修改)。谷歌了它,所以不能再帮助你了。如果这还不够,你的任务就成功了。