MastarCpler开发日志(二)——用antlr4搞出parse树

参考:

-官方文件:

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. "+":出现1+次。
  2. "*":出现0+次。
  3. "?":出现1-次,或者将贪婪匹配(尽量向后匹配直到不能匹配)改为不贪婪匹配。
  4. ".":匹配除换行符 \n 之外的任何单字符。

我感觉已经够用了。需要进一步参考的话请戳:


antlr4语法规则有这样三类:

  1. Parser rule (non-terminal),该规则命名开头应小写。
  2. Lexer rule (terminal),该规则命名开头应大写。
  3. fragment,给Lexer规则中的公共部分命名。

需要注意的是,如果规则有冲突,则先出现的先匹配。当然还有很多其他的,但我暂时没有用到。

然后比较重要的就是“statement”和“expression”了。

statement
:
	compoundStatement
	| expressionStatement
	| conditionalStatement
	| iterativeStatement
	| jumpStatement
	| nullStatement
	| varDefStatement
;

这是statement,那个compoundStatement指的是语句块,即 { ... } 。

优先级 运算符 描述 结合性
1 :: 作用域解析 从左到右
2 a++   a-- 后缀自增与自减
type()   type{} 函数风格转型
a()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值