antlr 规则上下文是否可以独立于目标
Can antlr rule contexts be target independent
我想知道是否有任何方法可以使以下antlr语法片段目标独立:
ifstatement locals [long condition = 0, long branch = 0, long end = 0]: ifpart[_localctx] thenpart[_localctx] (elifpart[_localctx] thenpart[_localctx])* (elsepart[_localctx])? 'fi';
ifpart [IfstatementContext base] : 'if' boolexpr ;
thenpart [IfstatementContext base] : 'then' statements ;
elifpart [IfstatementContext base] : 'elif' boolexpr ;
elsepart [IfstatementContext base] : 'else' statements ;
这似乎在 Java 中工作正常,但是使用 Cpp 目标时,antlr 生成的代码无法编译。 我在语法中没有任何动作或谓词。
我的预期目标是C++,但我打算让侦听器实现每个规则的操作,而不是直接将它们放在语法中,以便语法仍然可以被 antlr 附带的基于 java 的开发工具分析和使用,并且我不想维护两个单独的语法文件。 在上述语法片段的 Cpp 目标上,需要将每个其他规则的参数类型更改为IfstatementContext *
这对于 Java 来说不是有效的语法。
在意图和设计方面,如果理解我正在尝试做什么是相关的,是让解析器的侦听器具有 if 语句的各个组件的预置和后置方法,在 ifstatement 上下文中更新本地字段,以便输出正确的代码以在一次传递中正确处理流控制。 我将使用长值作为代码中点的引用,这些点稍后需要使用更新的地址信息进行修补,因为每个不同的 if 语句片段都已完成。 请注意,我不是在问如何编写侦听器代码。
但是,如果可能的话,我非常想知道如何以与目标无关的方式在antlr语法中引用这些上下文。
如果需要任何进一步的细节,请在评论部分注明,我将尽力解决任何和所有具体问题。
操作和谓词代码始终以目标语言编写。这是没有办法的。如果您需要与平台无关的行为,请不要使用操作或谓词。
话虽如此,有一种方法可以只使用所有可能的目标语言支持的表达式。例如,简单的变量名称,带有大括号if-then-else
结构,函数调用以及类似的东西在C++,Java和C#等语言中几乎相同。Python/PHP/Swift 明显不同,Javascript/Typescript 通常需要this
前缀(但在其他方面是兼容的(。
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++A*算法并不总是在路径中具有目标节点
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 使用源向量作为目标
- 是否可以用C++/WinRT将windows 10.0.14393作为目标
- 在 CMake 中为每个目标设置编译器/链接器标志
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 CMake 中对目标依赖项进行分组?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何为包含头文件的目标编写生成文件?
- 线性优化目标函数中的绝对值
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 字符串函数在目标C++上运行时C++返回空
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- antlr 规则上下文是否可以独立于目标
- 源代码构建中的 SCons 仅适用于可执行程序,不适用于目标文件
- 引用相对于其目标的生存期
- C++是否适用于小型嵌入式目标
- 如何制作自定义MSBuild目标's的执行依赖于文件's的时间戳