ANTLR4书引用了一个多模式示例
https://github.com/stfairy/learn-antlr4/blob/master/tpantlr2-code/lexmagic/ModeTagsLexer.g4
lexer grammar ModeTagsLexer;
// Default mode rules (the SEA)
OPEN : '<' -> mode(ISLAND) ; // switch to ISLAND mode
TEXT : ~'<'+ ; // clump all text together
mode ISLAND;
CLOSE : '>' -> mode(DEFAULT_MODE) ; // back to SEA mode
SLASH : '/' ;
ID : [a-zA-Z]+ ; // match/send ID in tag to parser
https://github.com/stfairy/learn-antlr4/blob/master/tpantlr2-code/lexmagic/ModeTagsParser.g4
parser grammar ModeTagsParser;
options { tokenVocab=ModeTagsLexer; } // use tokens from ModeTagsLexer.g4
file: (tag | TEXT)* ;
tag : '<' ID '>'
| '<' '/' ID '>'
;
我试图在此示例的基础上进行构建,但使用"
和"
字符作为分隔符。如果我简单地替换,我得到了错误126
<代码>无法为非组合语法中的字符串文字创建隐式标记:“«”
事实上,当我在解析器标记规则中有了字符时,这似乎就会发生。
tag : '«' ID '>';
具有
OPEN : '«' -> pushMode(ISLAND);
TEXT : ~'«'+;
有没有什么我不知道的东西?这是使用antlr4 maven插件。
wiki提到了一些类似的内容,但我的阅读方式与github上的示例和使用<代码>
您是否指定了ANTLR在读取语法时应该使用的文件编码?对于小于255的欧洲字符应该可以,但。。。
以下情况之一正在发生:
>
您忘记在ModeTagsLexer中更新打开规则。g4使用以下表格:
OPEN : '«' -> mode(ISLAND) ;
您在ANTLR 4中发现了一个错误,应该将其报告给问题跟踪器。
我正在为一种语言编写一个编译器,作为大学使用ANTLR4的项目。我使用Java编写了这个编译器,并采用了Visitor模式,当我到达测试阶段时,我注意到ANTLR忽略了我的部分代码,并生成了它不应该生成的错误。 语法: 以下是我的主要观点: 当我运行Main时,它显示: 第1行:0不匹配的输入'import'应为{(',INT,FLOAT,STRING,IDF} 我的语法有什么地方错了吗?如果没有
我们如何才能让他们识别lexer规则?所有、和规则都可能与匹配。那么我在测试它的时候应该使用什么类型。 我的意思是: 一般来说,我想了解如何知道的类型?
我正在用ANTLR4/JavaScript编写一个简单的“语言”,它可以将数字与变量关联起来并打印出来。这很好,但是在扩展print语句以获取一个或多个变量之后,我不知道如何获得它们的计数。(我使用的是访问者,而不是倾听者,但我对两者都感兴趣。) 语法:
我有一个ANTLR4语法,用于语法高亮显示的方法。当用户更改文本时,该方法被触发并生成CommonTokenStream。当我调用GetTokens()时,我只得到一些预期的令牌。当我调用Consume()时,我会得到更多,但不是全部。如何获取文本中的所有令牌?
我是一个Antlr4新手,有一个相对简单的语法问题。语法在末尾的底部给出。(这是一个语法片段,用于分析生物序列变体的描述)。 在下面的单元测试中,我试图解析字符串。 这里出了什么问题?我在哪里可以学习如何解决这个问题?
我正在做一个Android应用程序,使用Firebase云消息。