当前位置: 首页 > 知识库问答 >
问题:

分析参数并删除最后一个逗号

董砚
2023-03-14

很抱歉标题不好,不知道该怎么写。无论如何,我正在使用ANTLR生成一个解析树。我正在尝试解析函数参数,这在某种程度上是可行的,但有一些事情我想更改,但我不确定如何更改。

这是我目前的设置:

function
    :   FUNCTION WORD LPAREN functionParams RPAREN ARROW WORD LBRACE RBRACE
    ;

functionParams
    :   (AMP WORD COMMA)*
    ;

// these could be wrong, I wrote these in by hand
AMP: '&';
WORD: [a-zA-Z_]+;
COMMA: ',';
LPAREN: '(';
RPAREN: ')';

这很好,很有效。但当我输入时说

fn test(&x, &y, &z) -> int { }

它给我一个错误,一个我更愿意改变的结果。错误是它希望每个参数后面都有一个逗号,所以

其次,它产生的树(gui)是这样的:

但是,我希望函数参数像这样解析到树中(去掉逗号以便于解释,并为每个参数指定自己的节点)。

    PARAMS
   /      \
&x          &y

共有1个答案

督瑞
2023-03-14

关于你的第一个问题,改变

functionParams
    :   (AMP WORD COMMA)*
    ;

functionParams
    :   ( param ( COMMA param )* )?
    ;

param
    :   AMP WORD
    ;

关于你的第二个问题,你没有指出你正在使用的Antlr版本。如果是Antlr V4,解析器只能生成解析树,而不是AST。实际上,使用解析树与使用AST几乎没有什么不同——只需遍历它并从感兴趣的节点中提取信息。只需稍加规划,您就可以定义语法规则,将有用的信息很好地隔离到它们自己的解析树节点中,例如上面的参数规则。当然,您可以自由遍历解析树并生成自己设计的AST。

如果您使用的是Antlr V3,解析器将直接生成AST。解析器语法语法还允许以相当灵活的方式对AST进行整形,包括跳过节点。然而,与Antlr V4相比,V3的优势并没有那么大。

 类似资料:
  • 问题内容: 我在SQL表中有一个文本备注字段,如果它是逗号,则需要删除该字段中的最后一个字符。 因此,例如,如果我有这些行,则需要从第2行和第4行中删除逗号。 输出为: 有任何想法吗? 问题答案: 使用和: 首先,您希望您的数据摆脱前导和尾随空格。然后检查第一个字符是否为。如果是的话,将其删除,否则什么也不做。然后又回来了。您可以使用删除第一个字符。 SQL小提琴

  • 问题内容: 我有这样的代码: 它会输出: 键:a值:b,键:c值:d, 但我想要这样的东西: 键:a值:b,键:c值:d 我不需要最后一个逗号,如何删除它。我在这里找到了用于循环数组的解决方案:https : //groups.google.com/d/msg/golang- nuts/XBScetK-guk/Bh7ZFz6R3wQJ ,但是我无法获取地图索引。 问题答案: 这是使用模板函数编写逗

  • 嗨,我刚刚开始用巨蟒和龙卷风以及mongodb进行实验(我是新手)。我写了一个简单的get函数来获取我的mongob中的所有值,并以JSON格式返回。问题是,当我尝试将输出写成JSON字符串时,我会在集合的最后一条记录后面得到一个逗号(,)。 我的输出就像 有谁能告诉我,我怎样才能去掉最后一条记录后面的逗号(,),因为这个逗号,我得到了一个格式错误的JSON字符串 我尝试过使用json转储 将输出

  • 我想格式化一个数字到小数点后两位。假设用户输入了,它应该被格式化为。在javascript中是否有一些内置函数来实现这一点?

  • 问题内容: 我正在使用循环从数据库中获取值,我的结果是: 我想要这样: 我想在循环的最后一个值后删除逗号。 问题答案: 使用功能: 第二个参数指示要删除的字符。

  • 我有一个主类,该类将输出打印到控制台。。。 例如,如果行中包含A和B,我需要打印“Apple” 我将在主方法中通过首先实例化该类的对象来实现这一点,即。 代码示例: