相关疑难解决方法(0)

使用标记列表构造抽象语法树

我想从一个令牌列表中构造一个AST.我正在编写脚本语言,我已经完成了词法分析部分,但我不知道如何创建AST.所以问题是,我该怎么做这样的事情:

WORD, int
WORD, x
SYMBOL, =
NUMBER, 5
SYMBOL, ;
Run Code Online (Sandbox Code Playgroud)

并将其转换为抽象语法树?最好,我想在没有像ANTLR之类的库那样的情况下这样做,我宁愿自己尝试从头开始.但是,如果这是一项非常复杂的任务,我不介意使用库:)谢谢

java interpreter abstract-syntax-tree

36
推荐指数
1
解决办法
2万
查看次数

是否有一个使用antlr4从java源代码创建AST并提取方法,变量和注释的简单示例?

有人可以提供一个详细的例子,说明我如何使用antlr4做到这一点?安装antlr4及其依赖项的说明将受到高度赞赏.

java antlr

17
推荐指数
1
解决办法
3万
查看次数

如何使用ANTLR4构建AST?

我有一个ANTLR3语法,可以构建一个抽象语法树.我正在寻求升级到ANTLR4.但是,似乎ANTLR4只构建解析树而不是抽象语法树.例如,output=AST不再识别该选项.此外,"The Definitive ANTLR4 reference"的文本中既没有出现"AST"也没有出现"抽象语法".

我想知道我是否遗漏了什么.

我的应用程序目前知道如何爬行ANTLR3生成的AST.更改它以处理解析树并非不可能,但这将是一项工作.在我开始走这条路之前,我想确定它是必要的.

abstract-syntax-tree antlr4

8
推荐指数
1
解决办法
4127
查看次数

如何报告来自ANTLR 4访客的错误?

我为布尔表达式创建了一个语法,现在我正在尝试实现访问者来评估它.

有人告诉我,不需要使用语义分析来复杂语法词法分析器和解析器规则,因为从访问者那里提供有意义的错误消息要好得多.

所以我试图在访问者中检查类型一致性,日期正确性等.我得到的惊喜是没有办法(至少我没有看到它)报告来自访问者的错误而不是抛出异常.如果我抛出异常,我将无法继续进行表达式验证并立即检测所有错误.另外,我必须以某种方式捕获所有解析异常类型(我应该如何知道它们?).总而言之,异常抛出似乎不是正确的解决方案.

您能否指导我如何计划在访问者遍历期间报告表达式语义中的错误?

c# antlr antlr4

3
推荐指数
1
解决办法
1574
查看次数

ANTLR4解析树简化

有没有办法让ANTLR4自动删除生成的解析树中的冗余节点?

更具体地说,我一直在试验GLSL的语法,并且由于规则转发需要自动处理运算符优先级,因此在解析树中最终会出现长线性的"表达式"序列.

大多数生成的树节点只是"转发到下一级优先级",因此不提供任何有用的语法信息 - 您只需要每个序列中的最后一个表达式节点(即规则转发停止的点)或者它成为具有多个子节点的实际树节点的点(即在源中遇到实际表达式)...

我希望有一种简单的方法来消除虚拟中间表达式节点 - 这种类型的结构必须在具有运算符优先级的任何语法中都是通用的.

语法的基本结构是从Khronos语言规范中获得的相当直接的克隆:

https://www.khronos.org/registry/gles/specs/3.1/es_spec_3.1.pdf

antlr antlr4

2
推荐指数
1
解决办法
2776
查看次数

如何仅替换匹配集合中的特定匹配?

我正在写一个求解方程的求解方法.该方法将是递归的; 搜索所有外括号并在找到时调用求解括号内的值,并在未找到括号时返回该值.

这个过程应该是这样的

20 * (6+3) / ((4+6)*9)
20 * 9 / ((4+6)*9)
20 * 9 / (10*9)
20 * 9 / 90
2
Run Code Online (Sandbox Code Playgroud)

如您所见,每场比赛可能有不同的替换值.我需要将括号替换为它的计算结果.有没有办法做到这一点.这是我到目前为止所拥有的.

public int solve(string etq)
    {

        Regex rgx = new Regex(@"\(([^()]|(?R))*\)");
        MatchCollection matches;

        matches = rgx.Matches(etq);

        foreach(Match m in matches){

            //replace m in etq with unique value here

        }

    //calculations here
    return calculation
    }
Run Code Online (Sandbox Code Playgroud)

Regex.replace(...)替换所有出现的指定模式.我希望能够匹配多个场景并用不同的输出替换每个场景

c# regex string

2
推荐指数
1
解决办法
1554
查看次数

标签 统计

antlr ×3

antlr4 ×3

abstract-syntax-tree ×2

c# ×2

java ×2

interpreter ×1

regex ×1

string ×1