【ANTLR】常见的几种编程语言表达模式
模式名 | 描述 | 示例 |
---|---|---|
序列模式 | 它是一个有限长度或者任意长度的序列,序列中的元素可以是词法符号或者子规则。序列模式的例了包括变量声明(类型后面紧跟着标识符)和整数序列范例实现 | 1. xy..z表示× 后面跟着y.... z 2. '{' INT+ '}'表示Matlab的整数向量 |
带终止符的序列模式 | 它是一个任意长的、可能为空的序列,该序列由一个词法符号分隔开,通常是分号或者换行符,其中的元素可以是词法符号或者子规则。这样的例子包括类°C语言带终止符的序列模式 的语句集合和一些用换行符来分隔的数据格式 | 1. (statement ';’)* 表示Java的语句集合 2. (row 'In')*表示多行语句 |
带分隔符的序列模式 | 它是一个任意长的、可能为空的序列,该序列由一个词法符号分隔开,通常是逗号、分号或是句号,其中的元索可以是词法符号或者子规则。这样的例子包括函数定义中的参数表、函数调用时传递的参数表、某些语句之间有分隔符却无终止符的,带分隔符的序列模式 编程语言",以及目录名 | 1. expr ( ,’ expr)* //函数调用时传递的参数 2. ( expr (, expr)* )? 表示函数调用时传递的参数是可选的 3. /"? name ( /’ name)* 表示简化的目录名 4. stat (’.’ stat)* 表示 若干个SmallTalk 语句 |
选择模式 | 它是一组备选分支的集合。这样的例子包括不同种类的类型、语句、表达式或者XML标签 | 1. type : 'int' | 'float'; 2. stat : ifstat | whilestat | 'return' expr ';'; 3. tag : '<' Name attribute* '>' | '<' '/' Name '>'; |
词法符号依赖 | 一个词法符号需要和一个或者多个后续词法符号匹配。这样的例子包括配对的圆括号、花括号、方括号和尖括号 | 1. '(' expr ')' 是嵌套表达式 2. ID '[' expr ']'数组索引表达式 3. '{' stat* '}' 花括号包裹的多个语句 4. '<' ID (',' ID)* '>' 泛型申明 |
嵌套模式 | 它是一种自相似的语言结构。这样的例子包括表达式、Java的内部类、嵌套的代码块以及嵌套的 Python 函数定义 | 1. expr : '(' expr ')' | ID ; 2. classDef :iclass' ID {’(classDef |method|field) '}’; |
参考:权威指南