给定语法的ANTLR代码

问题描述:

我正在尝试为以下语法编写ANTLR代码。我对ANTLR很陌生。有人可以帮助我吗?我环顾四周,只能找到与加法,减法等基本计算相关的教程。给定语法的ANTLR代码

PRINT a + b应打印一个+ b表达式并打印“This is test”应该打印这是测试。 INTEGER a,b应该被接受。我可以为INTEGER做一次,但不能一次完成多个INTEGER。

+0

亲爱的乔,这是不是很清楚,我想要达到什么。你想申请某种翻译吗?你能否详细说明一下,也许你可以发布你开发的语法。谢谢,并以良好的问候,朱利安 – Julian

+0

请帮我这个 –

,也许你可以为了收集表达式或字符串使用下面的语法为起点

​​

你可以在一个简单的解析树监听器挂钩。

关于整数范围: 我不会对语法范围进行有效性检查 - 在语法中,我只是确保提供的值是一个类似于Number: '-'? ([0-9]|[1-9][0-9]+);之类的int。将范围表示为一个正则表达式,只接受属于该语法范围内的值,这不是一个好主意。在处理值的程序中这样做更好。否则,你结束了这样的事情;-):

(-[0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-21[0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|-214[0-6][0-9][0-9][0-9][0-9][0-9][0-9]|-2147[0-3][0-9][0-9][0-9][0-9][0-9]|-21474[0-7][0-9][0-9][0-9][0-9]|-214748[0-2][0-9][0-9][0-9]|-2147483[0-5][0-9][0-9]|-21474836[0-3][0-9]|-214748364[0-2]|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|-[1-9][0-9]{0,8}|[0-9]|[1-9][0-9]*)&([0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|21[0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|214[0-6][0-9][0-9][0-9][0-9][0-9][0-9]|2147[0-3][0-9][0-9][0-9][0-9][0-9]|21474[0-7][0-9][0-9][0-9][0-9]|214748[0-2][0-9][0-9][0-9]|2147483[0-5][0-9][0-9]|21474836[0-3][0-9]|214748364[0-2]|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|[1-9][0-9]{0,8}|0|-[1-9][0-9]*) 
+0

感谢您的帮助。 请帮我用ANTLR代码多一个语法 - int的范围应该是-2147483643到2147483643 –

+0

上面的答案改了文字;-) – Julian