参考:
-官方文件:
https://github.com/antlr/grammars-v4/blob/master/cpp/CPP14.g4
-《C++ Primer》第五版
-别人的总结
https://abcdabcd987.com/notes-on-antlr4/
过程:
Mx*语言结构
另外推荐一个挺好的在线画框图的网站:https://processon.com/
我认为基本用到的antlr4格式大概就是
name : content ;
用(AB)表示连结,(A|B)表示或,再结合正则表达式的表示方法如下:
- "+":出现1+次。
- "*":出现0+次。
- "?":出现1-次,或者将贪婪匹配(尽量向后匹配直到不能匹配)改为不贪婪匹配。
- ".":匹配除换行符 \n 之外的任何单字符。
antlr4语法规则有这样三类:
- Parser rule (non-terminal),该规则命名开头应小写。
- Lexer rule (terminal),该规则命名开头应大写。
- fragment,给Lexer规则中的公共部分命名。
需要注意的是,如果规则有冲突,则先出现的先匹配。当然还有很多其他的,但我暂时没有用到。
然后比较重要的就是“statement”和“expression”了。
statement
:
compoundStatement
| expressionStatement
| conditionalStatement
| iterativeStatement
| jumpStatement
| nullStatement
| varDefStatement
;
这是statement,那个compoundStatement指的是语句块,即 { ... } 。
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1 | :: |
作用域解析 | 从左到右 |
2 | a++ a-- |
后缀自增与自减 | |
type() type{} |
函数风格转型 | ||
a() |