C# Antlr 4 Lexer规则歧义
因此,我正在构建一个语法来解析C# Antlr 4 Lexer规则歧义,c#,antlr,antlr4,lexer,C#,Antlr,Antlr4,Lexer,因此,我正在构建一个语法来解析c++头文件 我只为头文件编写了语法,不打算为实现编写任何语法 我的问题是,如果一个方法是在头中实现的,而不是仅仅定义的 Foo bar() { //some code }; 我只想将bar的实现与 BLOCK : '{' INTERNAL_BLOCK*? '}' ; fragment INTERNAL_BLOCK : BLOCK | ~('}') ; 但这会干扰任何其他语法,包括{…},因为这将始终匹配两个大
c++
头文件
我只为头文件编写了语法,不打算为实现编写任何语法
我的问题是,如果一个方法是在头中实现的,而不是仅仅定义的
Foo bar()
{
//some code
};
我只想将bar
的实现与
BLOCK
: '{' INTERNAL_BLOCK*? '}'
;
fragment INTERNAL_BLOCK
: BLOCK
| ~('}')
;
但这会干扰任何其他语法,包括{…}
,因为这将始终匹配两个大括号之间的内容。当存在歧义时,是否仍需要指定要使用的令牌
p、 我不知道
块
的语法是否有效,但你知道要点。因此,重要的解析器规则是:
method : mType mTypeName LPAREN RPAREN BLOCK ; // simplified
unknown : . ;
lexer生成的块标记(作为方法规则的一部分不匹配)将出现在未知上下文节点的解析树中。分析方法上下文节点并忽略未知节点