鉴于以下基本语法,我想了解如何处理注释行.缺少的是处理<CR><LF>通常会终止注释行 - 唯一的例外是EOF之前的最后一条注释行,例如:
# comment
abcd := 12 ;
# comment eof without <CR><LF>
Run Code Online (Sandbox Code Playgroud)
grammar CommentLine1a;
//==========================================================
// Options
//==========================================================
//==========================================================
// Lexer Rules
//==========================================================
Int
: Digit+
;
fragment Digit
: '0'..'9'
;
ID_NoDigitStart
: ( 'a'..'z' | 'A'..'Z' ) ('a'..'z' | 'A'..'Z' | Digit )*
;
Whitespace
: ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN ; }
;
//==========================================================
// Parser Rules
//==========================================================
code
: ( assignment | comment …Run Code Online (Sandbox Code Playgroud) 我想在基本文件io(Java)中使用解析器操作,例如在ANTLR语法中使用PrintWriter.我必须使用superClass选项还是可以使用@header?在这两种情况下,我如何声明PrintWriter对象以及如何处理异常?
有没有任何常见的解决方案如何使用不完整的语法?在我的情况下,我只想检测Delphi(Pascal)文件中的方法,这意味着procedures和functions.以下第一次尝试正在进行中
methods
: ( procedure | function | . )+
;
Run Code Online (Sandbox Code Playgroud)
但这是一个解决方案吗?还有更好的解决方案吗?是否可以通过动作停止解析(例如,在检测之后implementation).使用预处理器是否有意义?什么时候 - 如何?