包含点字符的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())