3

我目前使用google-code-prettify进行语法突出显示。它似乎不支持LLVM。下面是它看起来格式化LLVM的时候,如:支持LLVM的HTML/JS/CSS语法突出显示器

enter image description here

这是非常丑陋。是否有任何支持LLVM的前端语法荧光笔?

+0

的LLVM插件结合时我写了我的答案现在是google-code-prettify的一部分!所以它现在支持LLVM语法。 –

+0

@NikhilDabas如此真棒 – jterrace

回答

3

我从LLVM TextMate Bundle project中抓取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']); 

这里是链接到一个demo jsFiddle,并演示页和README一个Gist

+0

+1这将是非常棒的。如果你为我移植正则表达式,那么你的+150是你的 – jterrace

+0

我在移植时注意了一下:http://jsfiddle.net/eaPg6/ - 我不是LLVM专家,你能用一些实际的LLVM代码来试验它吗? ? –

+0

微小更新:http://jsfiddle.net/eaPg6/2/ –

0

考虑到LLVM是一种相当晦涩的编程语言,可以肯定的是你会找到专门为它设计的语法高亮器。但是,这并不意味着你不能作弊,并且做一些工作。我建议使用SyntaxHighlighter。 http://alexgorbatchev.com/SyntaxHighlighter

尽管它本身不支持LLVM,但它为各种其他编程语言提供了许多内置画笔。我会试试看,并尝试将不同的画笔(语法荧光笔)应用于您的LLVM代码。有些会匹配得很好,有些则会显得非常平淡,就像您演示的例子。

如果你看here,你也会看到很多非官方的笔刷也存在。这是使用SyntaxHighlighter的好处 - 如果设计了LLVM的刷子(或者如果您决定自己设计它),它将很容易实现。

祝你好运!

0

不知道你是一个Linux的家伙,因为你使用Python我想你是这样做的。 Emacs和Vim似乎支持LLVM语法突出显示。见http://llvm.org/docs/GettingStarted.html。 如果你不想使用这些,也许你可以使用其他IDE或编辑器提供的语法文件(有一些小窍门)。 谷歌搜索了,所以不能帮助你进一步。 如果没有足够的成功,你的追求。

1

Pyments支持LLVM。它基于python后端,用户可以在样式之间进行选择。

输出模式:

  • HTML
  • ANSI序列(控制台输出)
  • 乳胶与封装minted
  • RTF

http://pygments.org/demo/45402/

+0

但是你需要一个服务器后端的pygments吧?我需要一个纯粹的前端(JS)方法 – jterrace