使用“listings”包为ANTLR语法文件的源代码着色?

使用“listings”包为ANTLR语法文件的源代码着色?

listings在毕业论文中使用了 package 作为源代码,除了 Java、C# 等主流语言外,还需要包含语言语法(.g)的源代码,这些语言是纯标记语言,格式如下:

options {
    language=Java;
    //backtrack=true;
    // please comment it in for correct lexer generation!
    // the definitions of many operators require backtracking!
} 


// program blocks

program
    : (declaration)+
    ;

declaration 
    :  metaDeclaration
    |  actionDeclaration
    |  globalDeclaration
    |  eventDeclaration 
    ;   

metaDeclaration
    : 'meta' metaParam STRING? ';'
    ;

metaParam 
    : 'version'
    | 'name'
    | 'icon'
    | 'color'
    | 'private'
    ;

globalDeclaration
    : 'var' varIdentifier ':' typeIdentifier 
       codeblock
    ;

我想要达到的是以下(或类似)的代码着色(见图):

ANTLR 高亮

我该怎么做?有没有我可以使用预设的语言模板?

编辑:我知道如何通过添加新关键字和颜色规则来添加自己的语言。我缺少以下内容:

  1. 如何将以双斜杠开头的行设置为注释(可能采用 C 模板?)
  2. 所有字符串都应为绿色。字符串是以单引号开头和结尾的字符序列,如上例所示。内容无关紧要,应始终用一种颜色着色。
  3. 所有文字都应为深蓝色。文字是完全用大写字母书写的非字符串(请参见我的代码中的“STRING”)
  4. 选项应为黑色。它们遵循以下模式:文本后跟花括号,花括号中的参数被指定为“param = value”(参见选项)
  5. 所有不符合上述规则的东西都应保持洋红色(=规则,上面有很多例子)。

我知道如何完成第一点,但我需要帮助完成其余的定制。

答案1

更新后的版本:

这是一个满足您的要求的更新版本:

  1. 双斜线注释以灰色和斜体显示
  2. 单引号中的字符串为绿色
  3. 文字(全部大写)为深蓝色(但需要指定)
  4. options{}为黑色,直到}遇到尾随。
  5. 其余均为洋红色
  6. 已启用换行(参见第 5-7 行)

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}

\lstset{% This applies to ALL lstlisting
    backgroundcolor=\color{yellow!10},%
    numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,%
    }%

% Applies only when you use it
\lstdefinestyle{MyLang}{
    basicstyle=\small\ttfamily\color{magenta},%
    breaklines=true,%                                      allow line breaks
    moredelim=[s][\color{green!50!black}\ttfamily]{'}{'},% single quotes in green
    moredelim=*[s][\color{black}\ttfamily]{options}{\}},%  options in black (until trailing })
    commentstyle={\color{gray}\itshape},%                  gray italics for comments
    morecomment=[l]{//},%                                  define // comment
    emph={%
        STRING%                                            literal strings listed here
        },emphstyle={\color{blue}\ttfamily},%              and formatted in blue
    alsoletter={:,|,;},%
    morekeywords={:,|,;},%                                 define the special characters
    keywordstyle={\color{black}},%                         and format them in black
}

\begin{document}
\begin{lstlisting}[style=MyLang]
options {
    language=Java;
    //backtrack=true;
    // please comment it in for correct lexer generation!
    // the definitions of many operators require backtracking!
} 


// program blocks

program
    : (declaration)+
    ;

declaration 
    :  metaDeclaration
    |  actionDeclaration
    |  globalDeclaration
    |  eventDeclaration 
    ;   

metaDeclaration
    : 'meta' metaParam STRING? ';'
    ;

metaParam 
    : 'version'
    | 'name'
    | 'icon'
    | 'color'
    | 'private'
    ;

globalDeclaration
    : 'var' varIdentifier ':' typeIdentifier 
       codeblock
    ;\end{lstlisting}
\end{document}

初始版本

改编自用附加关键字来扩展语言?应该可以让你开始:

在此处输入图片描述

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\lstset{%
    backgroundcolor=\color{yellow!20},%
    basicstyle=\small\ttfamily\color{blue},%
    numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,%
    }%

% Add your keywords here, and have this in a separate file
% and include it in your preamble
\lstset{emph={%  
    color, icon, meta, name, private, var%
    },emphstyle={\color{green}}%
}%


\begin{document}
\begin{lstlisting}
metaParam 
    : 'version'
    | 'name'
    | 'icon'
    | 'color'
    | 'private'
    ;

globalDeclaration
    : 'var' varIdentifier ':' typeIdentifier 
       codeblock
    ;
\end{lstlisting}
\end{document}

相关内容