包含点字符的ANTLR4字符串解析
我正在尝试匹配包含点字符的ANTLR4字符串解析,antlr4,Antlr4,我正在尝试匹配“Hello.World”,其中单词之间的是必须的,但是我的语法似乎不起作用。如何修复它?如果可能的话,我希望在点之前和之后至少有一个字符。您似乎希望匹配“Hello.World”作为完整的标记。如果没有,请告诉我。为此,一个非常简单的方法就足够了: grammar h1; column_name : '"' ALPHANUMERIC '.' ALPHANUMERIC '"' ; ALPHA : [a-zA-Z]+ ; fragment ALPHANUMER
“Hello.World”
,其中单词之间的
是必须的,但是我的语法似乎不起作用。如何修复它?如果可能的话,我希望在点之前和之后至少有一个字符。您似乎希望匹配“Hello.World”
作为完整的标记。如果没有,请告诉我。为此,一个非常简单的方法就足够了:
grammar h1;
column_name
: '"' ALPHANUMERIC '.' ALPHANUMERIC '"'
;
ALPHA : [a-zA-Z]+ ;
fragment ALPHANUMERIC : ALPHA (ALLOWEDATTCHAR)* ;
fragment ALLOWEDATTCHAR : '-' | '_' | [0-9] | ALPHA ;
以下是字符串
规则的作用:首先匹配双引号,然后匹配单个字母数字字符。然后匹配零个或多个字母数字字符,直到看到一个点或另一个双引号。如果找到一个点,则匹配另一个字母数字字符,然后再匹配零个或更多这样的字符,直到找到双引号
别忘了为空白添加一条规则,否则你将不得不在任何地方手动处理它们。通常跳过空白或将其放在隐藏通道上:
DOT: '.';
String: '"' ALPHANUMERIC ALPHANUMERIC* (DOT ALPHANUMERIC ALPHANUMERIC*)? `"`;
column_name: String;
下面是使用稍微复杂一点的输入(Hel-lo.Wo_rld
)的这种方法的解析结果:
您似乎想要匹配
“Hello.World”
作为一个完整的标记。如果没有,请告诉我。为此,一个非常简单的方法就足够了:
grammar h1;
column_name
: '"' ALPHANUMERIC '.' ALPHANUMERIC '"'
;
ALPHA : [a-zA-Z]+ ;
fragment ALPHANUMERIC : ALPHA (ALLOWEDATTCHAR)* ;
fragment ALLOWEDATTCHAR : '-' | '_' | [0-9] | ALPHA ;
以下是字符串
规则的作用:首先匹配双引号,然后匹配单个字母数字字符。然后匹配零个或多个字母数字字符,直到看到一个点或另一个双引号。如果找到一个点,则匹配另一个字母数字字符,然后再匹配零个或更多这样的字符,直到找到双引号
别忘了为空白添加一条规则,否则你将不得不在任何地方手动处理它们。通常跳过空白或将其放在隐藏通道上:
DOT: '.';
String: '"' ALPHANUMERIC ALPHANUMERIC* (DOT ALPHANUMERIC ALPHANUMERIC*)? `"`;
column_name: String;
下面是使用稍微复杂一点的输入(Hel-lo.Wo_rld
)的这种方法的解析结果:
我可能错了,但我认为您不能在解析器规则中使用片段。这是正确的。片段规则只能在其他lexer规则中使用。我可能错了,但我认为您不能在解析器规则中使用片段。这是正确的。片段规则只能在其他lexer规则中使用。是的,我希望点前至少有一个字符,点后至少有一个字符。是的,我认为这很简单,并尝试了一种类似于你的方法,我得到了以下错误
第1:0行输入不匹配的“Hello.World”'expecting'“'
我还复制粘贴了您粘贴的解决方案,但仍然会收到相同的错误。相同的错误仍然存在。我不确定到底出了什么问题。它很简单,但无法让它工作。我正在进行双重检查和三重检查,但仍然存在相同的错误。我分配了一个变量,如String columnName=“\”Hello.World\”然后在这里设置入口点parseTreeWalker.walk(新的ParseRuleDefinition(),myParser.column_name())在提出新问题之前,让我们首先关注解析步骤。您的解析器现在是否正确处理测试字符串?是的,我希望在点之前至少有一个字符,在点之后至少有一个字符。是的,我认为这很简单,并尝试了一种类似于你的方法,我得到了以下错误第1:0行输入不匹配的“Hello.World”'expecting'“'
我还复制粘贴了您粘贴的解决方案,但仍然会收到相同的错误。相同的错误仍然存在。我不确定到底出了什么问题。它很简单,但无法让它工作。我正在进行双重检查和三重检查,但仍然存在相同的错误。我分配了一个变量,如String columnName=“\”Hello.World\”然后在这里设置入口点parseTreeWalker.walk(新的ParseRuleDefinition(),myParser.column_name())在提出新问题之前,让我们首先关注解析步骤。解析器现在是否正确处理测试字符串?