我想要实现的:在JavaScript中处理ANTLR4的评论 现在我正在用antlr4js编写解释器C脚本,我想要获取注释内容。示例: /* this is my function */
int add(int a, int b); 然后,我想要获取string "this is my function",并附加到add()。 我用谷歌搜索了一下,发现我可以使用hidden channel。这是我引用的页面: This is Stuff: Tackling Comments in ANTLR Compiler 我可以在词法分析之后编码收集注释(在上面的页面中收集隐藏的标记),
我正在尝试修改运行时,使其不使用共享指针和锁。我确实用new运算符替换了所有的运算符,到目前为止一切正常,运行时仍然正常运行,但是...有大量的内存泄漏(这并不奇怪)。像ATNConfig这样的对象的生命周期是什么?在哪里可以安全地删除它们?注意,我还让生成的解析器使用非静态ATN,因此在多线程上下文中不需要锁。
下面是我得到的一个泄漏的例子:
==4747== 54,736,648 (53,672,160 direct, 1,064,488 indirect) bytes in 1,118,170 blocks are definitely lost in loss record 1,519
我正在为ANTLR规则参数而挣扎。ANTLR版本为4.4。
grammar A;
DIGIT: [0-9];
s: val EOF;
val: dval[1] | val '*' val;
dval[int x]: '.';
ANTLR失败,错误为
error(50): :2:32: syntax error: '1' came as a complete surprise to me while looking for rule element
/Users/parrt/antlr/code/antlr4/tool/src/org/antl
一旦初始化了解析器lexer并获得了translationUnit上下文,如何直接跳转到(最近的) ParserRuleContext,其中包含antlr4中的特定行和字符位置(CPP运行时)?
通常,我使用Listener模式来遍历translationUnit上下文。在每个访问的上下文中,我可以使用以下代码获得上下文的对应行和字符位置:
antlr4::Token* tokenclass = _tokenstream->get(myContext->getSourceInterval().a); // use ".b" if end of interval is
我在ANTLR4中有一个语法,我正在围绕它编写一个应用程序。相关语法的一个片段如下所示:
grammar SomeGrammar;
// ... a bunch of other parse rules
operand
: id | literal ;
id
: ID ;
literal
: LITERAL ;
// A bunch of other lexer rules
LITERAL : NUMBER | BOOLEAN | STRING;
NUMBER : INTEGER | FLOAT ;
INTEGER : [0-9]+ ;
我正在尝试编译一个语法,并让它在ANTLR4中工作。语法是为ANTLR3编写的,我收到了很多编译错误。以下是其中之一:
syntax error: '->' came as a complete surprise to me while looking for rule element
这是导致错误的规则。
tokens {
ZONE;
ZONE_OFFSET;
}
time_zone_abbreviation
: UTC -> ZONE["UTC"]
| EST -> ZONE["America/New_Yor
我正在编写一个将JavaCC转换为ANTLR4的编译器,其中一条规则涉及传递参数并从中获取返回值。
对于规则“term”,我必须执行类似以下的操作:
Term term(ReadOptions options, int priority):
{
int p = options.operatorSet.getNextLevel(priority);
Term t;
}
{
(
LOOKAHEAD({p==0})
t = simpleTerm(options)
|
LOOKAHEAD(<NAME_TOKEN>,{priority==1201 &a
目前,我正在使用这样的代码来访问我的ANTLR4树侦听器实现中的主上下文的子上下文:
ctx.children.forEach(function(child) {
if (child.ITALIC != undefined) {
var text = child.ITALIC().getText();
...
} else if (child.LABELREF != undefined) {
var text = child.LABELREF().getText();
...
}
...
由于
我为ANTLR4实现了一种基本语法,以便从简单的Javascript-esque语言构建JavaScript解释器。
当我运行我的脚本来转换代码(解析/生成/转换溢出)时,我得到了TypeError: ctx.INT is not a function,它来自from拼写器文件。
这是我要编译的脚本
var fs = require('fs');
var antlr4 = require('antlr4');
var buildAst = require('./build-ast');
var mylangTranspiler = require