如何在语法或解析错误上引发有意义的错误 [英] How to throw meaningful error on syntax or parsing error

查看:146
本文介绍了如何在语法或解析错误上引发有意义的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个解析jcl的语法

I have a grammar for parsing jcl

jcl如下所示 /*注释行 //PR1290 @ JOB(10),"ISPW COB SN900E"

The jcl looks like below /*comment line //PR1290@ JOB (10),'ISPW COB SN900E'

词法分析器和解析器工作正常. 假设而不是//如果jcl从/开始,当前lexer在以下位置抛出1:0令牌识别错误:'/P'

lexer and parser is working perfectly fine. Suppose instead of // if jcl starts from / currently lexer is throwing 1:0 token recognition error at: '/P'

解析器不会抛出任何可行的替代输入R1290 @ JOB

Parser will throw no viable alternative input R1290@ JOB

我正在寻找在编辑时抛出类似于eclipse的错误.

I am looking for throwing error similar to eclipse while editing.

public void Test(){
//test 
//}

上面将说语法错误insert}来完成方法主体.

Above will say syntax error insert } to complete method body..

与此类似的事情,我想指出正确的错误消息,指出"jcl行应以//开头"

Something similar to this I want to point out right error message saying "jcl lines should start with // "

下面的示例jcl行 //NAME Operationname parameter = parametervalue

Example jcl line is below //NAME Operationname parameter=parametervalue

如果//丢失,我想抛出一句话,该行应以//开头 操作名称应为JOB或PROC 如果缺少关键字,则输入有效的关键字参数

If // is missing i want to throw saying line should start with // Operation name should be either JOB or PROC if keyword is missing then enter valid keyword parameter

并且如果缺少任何参数,我想指出该写意向用户显示完整消息.

and if any parameter is missing i want to point out that write meaning full message to user.

我正在使用antlr 4.7.2版本

I am using antlr 4.7.2 version

推荐答案

您可以先添加自己的错误侦听器...

You can start with adding your own error listener ...

请参见 https://learning.oreilly. com/library/view/the-definitive-antlr/9781941222621/f_0062.html

我觉得足够了,但您可能会需要更多

I find it enough but you will likely need more

这篇关于如何在语法或解析错误上引发有意义的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆