如果我注释了三个@init
操作中的两个,那么无论wich,编译都很好。
我将语法转换为Java,并按照Antlr4网站中的教程进行编译:在java-classpath.;../antlr-4.2-complete.jar org.antlr.v4.tool grammar_a2.g4
时,我会得到相同的错误,但会指示错误94,action_redefinition。
我尝试用antlr版本4.1和版本4.2编译。
grammar Grammar_A;
@parser::members
{
protected const int EOF = Eof;
int numPrints, numReads;
}
@lexer::members
{
protected const int EOF = Eof;
protected const int HIDDEN = Hidden;
}
program
@init { numPrints = numReads = 0; }
: (printExpression | readExpression)+
;
printExpression
@init {numPrints++;}
: PRINT_KEY
( id
| QUOT id QUOT
)
SEMICOLON
;
readExpression
@init {numReads++;}
: ID READ_KEY SEMICOLON
;
id
: ID | PRINT_KEY | READ_KEY
;
WS
: (' ' | '\r' | '\n') -> channel(HIDDEN)
;
PRINT_KEY : 'print';
READ_KEY : 'read';
ID : ('a'..'z')+ ;
SEMICOLON : ';';
QUOT : '"';
grammar_a1
grammar Grammar_A1;
@parser::members
{
protected const int EOF = Eof;
}
@lexer::members
{
protected const int EOF = Eof;
protected const int HIDDEN = Hidden;
}
id
: ID | PRINT_KEY | READ_KEY
;
WS
: (' ' | '\r' | '\n') -> channel(HIDDEN)
;
PRINT_KEY : 'print';
READ_KEY : 'read';
ID : ('a'..'z')+ ;
grammar_a2
grammar Grammar_A2;
import Grammar_A1;
@parser::members {
int numPrints, numReads;
}
program
@init { numPrints = numReads = 0; }
: (printExpression | readExpression)+
;
printExpression
@init {numPrints++;}
: PRINT_KEY
( id
| QUOT id QUOT
)
SEMICOLON
;
readExpression
@init {numReads++;}
: ID READ_KEY SEMICOLON
;
SEMICOLON : ';';
QUOT : '"';
>
如果您可以在Java代码中重现此问题(看起来您可以),您可以在引用实现的问题跟踪器上将其作为bug报告。否则,如果这是特定于C#目标的,您可以在C#目标的问题跟踪器上报告它。
如果只有一种语法,我强烈建议您考虑的唯一分离方法是将其拆分为lexer语法
和parser语法
,而不要使用import
语句。import
语句真正起作用的情况很少。
您在问题中指示的操作对于正确的解析并不是必要的,因此应该将其重新定位到监听器或访问者,在解析完成后执行。在正确的位置执行这些操作后,您将不再受到所描述的问题的限制。
我试图从Coldfusion 10服务器执行一个MySQL insert语句,这会导致一个Cold Fusion错误。 当从MySQL工作台执行MySQL insert语句时,它可以正常工作。此外,我确认在Coldfusion 10服务器上执行的select语句工作正常。 接下来,我尝试设置变量“binlog format”cfquery本身。 这导致了一个新的CFE。 最后,我尝试在“MySQL
我正在尝试将我的ANTLR4语法拆分到多个文件中,这样我可以更容易地测试它们,我正在使用gradle作为java项目中的构建工具。 如下所示: 所有开源的代码都在下一个链接中:https://github.com/kanekotic/specflow.rider/tree/antlr4_multiple_grammar
我正在使用ArcGIS JSAPI 4.12,并希望使用空间错觉在地图上绘制军事符号。 当我向脚本添加时,控制台返回错误 未捕获的SyntaxError:无法在模块外部使用导入语句` 因此,我将添加到脚本中,然后它返回 未捕获的引用错误:未定义ms 这是我的密码: 因此,无论我是否添加,都会出现错误。然而,在空间幻觉的官方文件中,脚本中没有任何。我现在真的很困惑。他们如何在不添加类型的情况下使其工
试图将用户模型中的“uuid”作为
是否有人使用es2015语法编写jasmine/jest测试?需要多少填隙/填充胶/选区划分? 我无法正确导入函数。我有一个模块:../utils/TweetUtils.js 和一个测试套件: ../../\uuuuu测试\uuuu/TweetUtils-test.js 如果我用这样的东西将控制台输出破解到套件中:
我有3个不同的TS文件,在1个主TS文件中动态加载2个TS文件,如下所示 现在,在这两个TS文件中,我正在导入jquery和jquery父TS文件 我的tsconfig.json 所以我的问题是jquery文件加载3次还是只加载一次。